在重新分配内存时,从Lua调用C会崩溃。

我在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中使用它却工作正常。

原文链接 https://stackoverflow.com/questions/2903887

点赞
stackoverflow用户189205
stackoverflow用户189205

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

为了解决这个问题,您可以在旧行上使用 realloc,在新行上使用 malloc。或者您可以在第一次 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-25 11:01:18