如何释放以这种方式初始化的 C 中的 malloc 二维数组?
How to free a malloc 2D array in C initialiszed in this way?
我在 C:
中声明了一个像这样的 2D malloc 数组
int** pArray;
int i;
pArray=(int**)malloc(pRows*sizeof(int*));
for(i=0;i<pRows;i++)
(int*)malloc(pColumns*sizeof(int*));
如何释放这个数组?我在网上看到 free() 的数量应该与使用的 malloc() 的数量相同。在这种情况下我可以免费两次什么?
对于初学者来说,分配不正确。这个说法
(int*)malloc(pColumns*sizeof(int*));
产生内存泄漏。
你的意思好像是下面的代码
int** pArray;
int i;
pArray = (int**)malloc( pRows * sizeof( int* ) );
for( i = 0; i < pRows; i++ )
{
pArray[i] = (int*)malloc( pColumns * sizeof( int ) );
}
注意在循环中的语句中使用了表达式sizeof( int )
而不是sizeof( int * )
。
您需要以相反的顺序释放分配的内存
for( i = 0; i < pRows; i++ )
{
free( pArray[i] );
}
free( pArray );
我在 C:
中声明了一个像这样的 2D malloc 数组 int** pArray;
int i;
pArray=(int**)malloc(pRows*sizeof(int*));
for(i=0;i<pRows;i++)
(int*)malloc(pColumns*sizeof(int*));
如何释放这个数组?我在网上看到 free() 的数量应该与使用的 malloc() 的数量相同。在这种情况下我可以免费两次什么?
对于初学者来说,分配不正确。这个说法
(int*)malloc(pColumns*sizeof(int*));
产生内存泄漏。
你的意思好像是下面的代码
int** pArray;
int i;
pArray = (int**)malloc( pRows * sizeof( int* ) );
for( i = 0; i < pRows; i++ )
{
pArray[i] = (int*)malloc( pColumns * sizeof( int ) );
}
注意在循环中的语句中使用了表达式sizeof( int )
而不是sizeof( int * )
。
您需要以相反的顺序释放分配的内存
for( i = 0; i < pRows; i++ )
{
free( pArray[i] );
}
free( pArray );