我写了下面的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 ;
}
然后我收到使用下面的代码this指针从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)的问题是,它可能会* *似乎工作没关系,和你有不确定的行为,当你走超出分配内存的界限。 –