Я написал следующую функцию C, которая возвращает двойной указатель после необходимого распределения памяти.C выделение и освобождение памяти
// integer double pointer to 2d array
void** idp_to_2d (int rows , int cols) {
int i ;
void **est = malloc (rows * sizeof (int*)) ;
for (i = 0 ; i <= rows ; i ++)
est[i] = malloc (cols * sizeof (int)) ;
return est ;
}
Тогда я получаю этот указатель, используя следующий код из main()
:
int **est = (int**) idp_to_2d (rows , cols) ;
Он отлично работает, и я могу индексировать как est[i][j]
означающего память была выделена правильно.
Теперь я освободить память в main()
, используя код, который следует:
int i ;
for (i = 0 ; i <= rows ; i ++)
free (est[i]) ;
free (est) ;
Теперь я получаю двойной бесплатно или коррупционный ошибку.
Мой компилятор GCC 4.9.2, OS является Ubuntu 15,04 (64-разрядная версия), и я использую NetBeans IDE 8.0.2.
проблема с [* неопределенное поведение *] (http://en.wikipedia.org/wiki/Undefined_behavior) является то, что это может показаться * * работать нормально, и у вас есть неопределенное поведение, когда вы идете вне границ выделенной памяти. –