如何使用int ** ptr?
使用函数分配的内存释放二维数组例如,我使用allocArray( &ptrArray, row, column);
来分配数组。
使用此函数释放已分配内存的正确步骤是什么:
void freeArray( int *** pA, int row, int column)
#include <stdio.h>
#include <stdlib.h>
void allocArray( int *** pA, int row, int column)
{
int i, j, count;
*pA = (int **) malloc(row * sizeof(int *));
for (int i =0; i<row; ++i)
{
(*pA)[i] = (int *) malloc( column * sizeof(int));
}
// Note that pA[i][j] is same as *(*(pA+i)+j)
count = 0;
for (i = 0; i < row ; i++)
for (j = 0; j < column; j++)
(*pA)[i][j] = ++count; // OR *(*(pA+i)+j) = ++count
for (i = 0; i < row; i++) {
for (j = 0; j < column; j++) {
printf("%d ", (*pA)[i][j]);
}
printf("\n");
}
}
// How to free a two dimensional array allocated memory using int ** ptr?
void freeArray( int *** pA, int row, int column)
{
}
void test_array_allocation()
{
int i, j;
int row = 3, column = 4;
int ** ptrArray;
allocArray( &ptrArray, row, column);
printf("test_array_allocation\n");
for (i = 0; i < row; i++) {
for (j = 0; j < column; j++) {
printf("%d ", (ptrArray)[i][j]);
}
printf("\n");
}
freeArray(&ptrArray, row, column); // free allocated memory
}
int main(int argc, const char * argv[]) {
test_array_allocation();
return 0;
}
答案 0 :(得分:1)
对于malloc
的每次通话,都必须对free
进行相应的通话。对free
的调用必须使用相应调用malloc
返回的相同指针值。
在您的情况下,您有以下使用malloc
分配内存的行。
*pA = (int **) malloc(row * sizeof(int *));
for (int i =0; i<row; ++i)
{
(*pA)[i] = (int *) malloc( column * sizeof(int));
}
使用row
中存储的值,free
的来电次数必须(*pA)
次。
然后,必须使用free
对*pA
进行一次调用。
现在,您可以将freeArray
实现为:
// No need for using int ***. You are not going to modify pA
// You are just going to use the pointer.
// You don't need column in this function.
void freeArray( int ** pA, int row)
{
for (int i =0; i<row; ++i)
{
free(pA[i]);
}
free(pA);
}
使用以下内容从test_array_allocation
调用
freeArray(pA, row);
答案 1 :(得分:0)
这个功能:
void freeArray( int *** pA, int row, int column)
{
}
参数&#39;列&#39;不需要。
void freeArray( int **pA, int row )
{
for( int i = 0; i < row; i++ )
{
free( pA[i] );
}
free( pA );
}