звоню из Луа падает при перераспределении - PullRequest
0 голосов
/ 25 мая 2010

я получил сумасшедшую ошибку в этом цикле 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 изменяет размер каждой строки. в сработало нормально сейчас я работаю над библиотекой для lua, и она падает здесь. compilin 'работает отлично. но звонит из-за аварий lua с

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

Понятия не имею, так как он отлично работает, используя его в c.

1 Ответ

7 голосов
/ 25 мая 2010

После вызова 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));
}
...