如何释放c 2darrays

我有以下代码:

int **ptr = (int **)malloc(sizeof(int*)*N); for(int i=0;i<N;i++) ptr[i]=(int*)malloc(sizeof(int)*N)); 

我怎么能免费使用ptr? 我应该循环ptr和free ptr [i]吗? 或者只是做

 free(ptr) 

和ptr将被释放?

您将不得不循环遍历ptr [i],释放您遍历的每个int *,如您最初建议的那样。 例如:

 for (int i = 0; i < N; i++) { int* currentIntPtr = ptr[i]; free(currentIntPtr); } 

恰好与分配相反:

 for(int i = 0; i < N; i++) free(ptr[i]); free(ptr); 

是的,你必须遍历ptr并释放每个ptr[i] 。 为了避免内存泄漏,一般规则如下:对于每个malloc() ,必须只有一个对应的free()

 for(int i=0;i 

您没有检查malloc无法分配。 你应该经常检查。