如何释放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无法分配。 你应该经常检查。