chiamando' c da crash durante l'allocazione lua
Domanda
ho ottenuto un errore di folle all'interno di tale ciclo for
matr=realloc(matr, newmax*sizeof(matr*));
for (i=0; i<newmax; i++){
matr[i]=realloc(matr[i], newmax*sizeof(int));
}
matr è una matrice multidimensionale: int ** matr. devo ridimensionare colonna e riga. prima linea ridimensiona colonna e il ciclo for ridimensiona ogni riga. ha funzionato bene a c. ora sto lavorando su una libreria per lua e scontri qui. compilin' funziona bene pure. ma chiamando da lua scontri con
lua: malloc.c:3552: mremap_chunk: Assertion `((size + offset) & (mp_.pagesize-1)) == 0' failed.
Non ho maledetto idea dal momento che è bene lavorare usarlo in c.
Soluzione
Dopo la chiamata realloc
, il contenuto della porzione appena allocato sono indeterminati. Ciò significa che quindi chiamando realloc
sulle nuove righe possono fallire perché cerca di riassegnare un puntatore non valido.
È possibile utilizzare realloc
sui vecchi filari e malloc
sulle nuove righe per risolvere questo problema. Oppure si può azzerare la nuova parte dopo la prima realloc
, e poi il ciclo funzionerà come è:
matr=realloc(matr, newmax*sizeof(matr*));
for (i=oldmax; i<newmax; i++)
matr[i] = NULL;
for (i=0; i<newmax; i++){
matr[i]=realloc(matr[i], newmax*sizeof(int));
}