0

我在那个 for 循环中遇到了一个疯狂的错误

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

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

matr 是一个多维数组:int **matr. 我需要调整列和行的大小。第一行调整列的大小,for 循环调整每一行的大小。它在 c 中运行良好。现在我正在为 lua 开发一个库,它在这里崩溃了。编译也可以正常工作。但是从lua调用会崩溃

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

我不知道,因为它在c中使用它工作正常。

4

1 回答 1

7

调用后realloc,新分配部分的内容是不确定的。这意味着随后调用realloc新行可能会失败,因为它试图重新分配一个无效的指针。

您可以realloc在旧行和malloc新行上使用来解决此问题。或者您可以在 first 之后将新部分归零realloc,然后您的循环将按原样工作:

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));
}
于 2010-05-25T11:01:18.333 回答