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.

È stato utile?

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));
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top