Question

Je suis une erreur folle dans cette boucle for

matr=realloc(matr, newmax*sizeof(matr*));

for (i=0; i<newmax; i++){
    matr[i]=realloc(matr[i], newmax*sizeof(int));
}

matr est un tableau à plusieurs dimensions: int ** matr. j'ai besoin de redimensionner la colonne et la ligne. redimensionne première ligne colonne et la boucle for redimensionne chaque ligne. il a bien fonctionné dans c. maintenant im travaillant sur une bibliothèque pour lua et Crashs ici. compilin' fonctionne bien aussi. mais l'appel de lua heurtes avec

lua: malloc.c:3552: mremap_chunk: Assertion `((size + offset) & (mp_.pagesize-1)) == 0' failed.

Je ne sais pas foutu car il fonctionne très bien l'utiliser dans c.

Était-ce utile?

La solution

Après avoir appelé realloc, le contenu de la partie nouvellement allouée sont indéterminées. Cela signifie que d'appeler ensuite realloc sur les nouvelles lignes peuvent échouer, car il essaie de réallouer un pointeur non valide.

Vous pouvez utiliser realloc sur les anciennes lignes et malloc sur les nouvelles lignes pour résoudre ce problème. Ou zéro, vous pouvez la nouvelle partie après la première realloc, puis votre boucle fonctionnera comme est:

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));
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top