Salve
innanzi tutto Auguro un Buon natale ed un felice anno nuovo a tutti.
non so come risolvere questo errore!
da quello che ci ho capito io e come se andassi a scrivere su una locazione invalida.
ma andando a vedere la variabile interessata ha l'indirizzo di una locazione di memoria che è stata allocata senza errori.
allora mi chiedevo c'è qualche altra sintassi per fare questa operazione:
numero->valore[indy] = '0';
extern "C" int __stdcall Bianca(struct attributo *&numero,int &inbyte,int &opzione)
{
int dime, modalita, errore, indy;
if ( inbyte==0 ) { errore=42; return errore; }
dime=0; modalita=0; indy=0; errore=0;
sub_attributo sattrib;
sattrib.attivo=1; sattrib.segno=0; sattrib.pv=0;
sattrib.inbyte = (int8_t)inbyte; sattrib.periodico=0;
sattrib.costante=0; sattrib.cripta=0; sattrib.fbcb=0;
sattrib.filler=0;
attributo numerox;
switch (opzione)
{
case 0:
{
bool su_stack = numero!=nullptr;
if (!su_stack)
{
numero = new (std::nothrow) attributo;
if (!numero){ errore=106; break; }
}
numero->valore = new char[inbyte];
if (!numero-> valore)
{
delete numero; numero=nullptr;
errore=106; break;
}
modalita=0;
errore = Modifica_Attribbuto(numero,modalita,sattrib,dime);
if (errore !=0)
{
delete[] numero->valore; delete numero;
numero=nullptr;
}
break;
}
case 1:
{
if (numero == nullptr) { errore = 95; break; }
numerox.valore=numero->valore;
bool su_stack = numero->valore != nullptr;
if (!su_stack)
{
numero->valore = new (std::nothrow) char[inbyte];
if (!numero->valore)
{
numero->valore = numerox.valore;
errore=106; break;
}
}
modalita=33; sattrib.inbyte = (int8_t) inbyte;
errore = Modifica_Attribbuto(numero,modalita,sattrib,dime );
if (errore !=0)
{
numero->valore = numerox.valore; break;
}
delete [] numerox.valore; break;
}
case 2:
{
if ( numero==nullptr ) { errore=95; break; }
if ( numero->valore==nullptr ) { errore=98; break; }
delete [] numero->valore; delete numero;
numero->valore = nullptr;
numero=nullptr;
}
default: { errore = 57; break; }
}
if (errore==0)
{
for ( indy=0;indy<inbyte;indy++)
{ numero->valore[indy] = '0'; } // qui si verifica l'errore
}
return errore;
}
apparentemente le due allocazioni funzionano visto che vedendo il debug nei rispettivi riferimenti c'è l'apposita locazione di memoria.
la struttura allocata è la seguente:
struct attributo
{
int attribbuto;
char *valore;
};
ringrazio anticipatamente tutti.