Я объявляю двумерный массив a (m * n) в цикле for
. Когда цикл for
запускается в первый раз, нет проблем, но во второй раз он генерирует ошибку. Программа:Неправильная контрольная сумма при использовании calloc и свободная в цикле
for (int j=0; j<2; j++) {
int **a = (int**)calloc(n,sizeof(int*));
for (int i=0; i<n; i++) {
a[i] = (int*)calloc(m,sizeof(int));
}
//...some operation to a[m,n] array
for (int i=0; i<n; i++)
free(a[i]);
free(a);
}
Когда цикл for
проходит во второй раз, он бежит к линии, содержащей calloc
и генерирует следующее сообщение об ошибке на консоли:
таНоса: *** погрешность объект 0x94a8b14: неправильная контрольная сумма освобожденного объекта - объект, вероятно, был изменен после освобождения
Это не имеет никакого значения, если я удалить строки, содержащие free
.
'a' имеет емкость для указателей' n', но вы его обрабатываете так, как будто у него 'm'. – juanchopanza
Я редактирую сообщение, m теперь n. – hzhou
вы должны отметить это C, а не C++ кстати – hauron