tags:

views:

103

answers:

1

hi folks,

i got a crazy error within that for-loop

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

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

matr is a multi-dimension array: int **matr. i need to resize column and row. first line resizes column and the for-loop resizes every row. it worked fine in c. now im working on a library for lua and it crashs here. compilin' works fine as well. but calling from lua crashs with

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

i have no damn idea since it's working fine using it in c.

+7  A: 

After calling realloc, the contents of the newly allocated portion are indeterminate. This means that then calling realloc on the new rows may fail because it tries to reallocate an invalid pointer.

You can use realloc on the old rows and malloc on the new rows to fix this. Or you can zero the new part after the first realloc, and then your loop will work as is:

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));
}
interjay
what do you mean with "you can zero the new part"?
mkind
I added code to show this. It works because realloc behaves like malloc when passed a null pointer.
interjay
ok, that seems to work for now. the new segmentation fault is caused by something different, i think.
mkind