来自lua的callin'c在重新分配时崩溃

mki*_*ind 0 c malloc lua realloc

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

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

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

matr是一个多维数组:int**matr.我需要调整列和行的大小.第一行调整列大小,for循环调整每一行的大小.它在c中运行良好.现在我正在为lua工作,它崩溃了.compilin的工作也很好.但是从lua打来的电话崩溃了

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

我没有该死的想法,因为它在c中使用它很好.

int*_*jay 7

在调用之后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));
}
Run Code Online (Sandbox Code Playgroud)