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または、最初の部分の後に新しい部分をゼロにすることができます。そうすれば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 に答える