2010-05-25 29 views
0

I的for循环呼唤从LUA crashs℃,同时重新分配

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

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

MATR内有一个疯狂的误差是一个多维阵列:整数** MATR。我需要调整列和行的大小。第一行调整列大小,for循环调整每行的大小。它在c中工作正常。现在我正在为卢阿的图书馆工作,并在这里崩溃。 compilin'也很好。但呼吁卢阿崩溃

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

我没有该死的主意,因为它工作正常使用它在c。

+0

存储Lua解释内部指针“MATR”?也许解释器在阵列被重新分配之后在某处使用旧指针。 – Rudi 2010-05-25 10:58:26

+0

mtr是c中结构的一部分。并且该结构表示为lua的userdata。 – mkind 2010-05-25 11:16:07

+1

这与Lua无关。 – lhf 2010-05-25 11:32:34

回答

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)); 
} 
+0

你是什么意思,“你可以零新零件”? – mkind 2010-05-25 11:07:31

+0

我添加了代码来显示这一点。它的工作原理是,当传递一个空指针时,realloc的行为类似于malloc。 – interjay 2010-05-25 11:10:14

+0

好的,这似乎现在工作。新的分段错误是由不同的东西引起的,我想。 – mkind 2010-05-25 11:22:37