Errore in esecuzione 0xC0000005:

di il
3 risposte

Errore in esecuzione 0xC0000005:

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.

3 Risposte

Devi accedere o registrarti per scrivere nel forum
3 risposte