Вопрос

В этом цикле я получил сумасшедшую ошибку

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

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

MATR - это многоразмерный массив: int ** matr. Мне нужно изменить размер столбца и строки. Первая строка изменяет измесу столбец, а для петли размерается в каждой строке. Это работало нормально в с. Теперь я работаю над библиотекой для Lua, и она сбивает здесь. Compicin 'работает нормально. Но призывая к авариям Lua с

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

У меня нет чертовской идеи, так как она работает нормально, используя его в с.

Это было полезно?

Решение

После звонка 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));
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top