例如,这是一个名为fnx.c
的函数文件的代码,其中func()
将从main函数调用。在将双指针同时返回主函数的同时,我应该如何释放TempArray
?
int * * TempArray; //global variable in this file
static void CreatePointer(int row, int col) {
int r;
TempArray = malloc(sizeof(int * ) * (row));
for (r = 0; r < row; r++) {
TempArray[r] = malloc(sizeof(int) * (col));
}
}
static void DestroyPointer() {
free(TempArray);
TempArray = NULL;
}
int * * func(int * * OriArray, int row, int col, int r_offset, int c_offset) {
int r, c;
CreatePointer(row, col);
for (r = 0; r < row; r++) {
for (c = 0; c < col; c++) {
TempArray[r][c] = OriArray[r + r_offset][c + c_offset];
}
}
//destroy TempArray??
return TempArray;
}
答案 0 :(得分:3)
main()
中,拨打CreatePointer()
main()
中,拨打func()
func()
之外,当您不再需要TempArray
时,请致电DestroyPointer()
你的DestroyPointer()
错了。你有内存泄漏。它应该是这样的:
static void DestroyPointer (int row)
{
for (int r = 0; r < row; r++)
{
free(TempArray[r]);
}
free(TempArray);
}
答案 1 :(得分:1)
如果你想在从main函数调用之后使用这个点(TempArray),你就不能销毁它(TempArray)。只有当你不想使用这个点数据时,你才能销毁它。 你可以这样测试:
main()
{
int *p = func(oriArray,row,col,r_offset,c_offset);
for (int r = 0; r < row; r++){
for(int c = 0; c < col; c++){
printf("%d",p[r][c]);
}
}
DestroyPointer();
}
希望它有所帮助!
答案 2 :(得分:0)
在释放TempArray
之前,您应释放所有行。
static void DestroyPointer (int row)
{
for (int r = 0; r < row; r++)
{
free(TempArray[r]);
}
free(TempArray);
TempArray = NULL;
}
但是你不应该在返回之前销毁指针,
因为在main
之后取消引用它会导致未定义的行为。