lin*_*ina 19 c memory-management
我有以下代码:
int **ptr = (int **)malloc(sizeof(int*)*N);
for(int i=0;i<N;i++)
ptr[i]=(int*)malloc(sizeof(int)*N));
Run Code Online (Sandbox Code Playgroud)
我怎样才能免费使用ptr free?我应该循环ptr和free ptr [i]吗?或者只是做
free(ptr)
Run Code Online (Sandbox Code Playgroud)
和ptr将被释放?
Jam*_*ord 15
您将不得不循环遍历ptr [i],释放您遍历的每个int*,如您最初建议的那样.例如:
for (int i = 0; i < N; i++)
{
int* currentIntPtr = ptr[i];
free(currentIntPtr);
}
Run Code Online (Sandbox Code Playgroud)
Don*_*alo 13
恰好与分配相反:
for(int i = 0; i < N; i++)
free(ptr[i]);
free(ptr);
Run Code Online (Sandbox Code Playgroud)
while (N) free(ptr[--N]);\nfree(ptr);\nRun Code Online (Sandbox Code Playgroud)\n\n#define FALSE 0\n#define TRUE 1\ntypedef int BOOL;\n\nvoid freev(void **ptr, int len, BOOL free_seg) {\n if (len < 0) while (*ptr) {free(*ptr); *ptr++ = NULL;}\n else while (len) {free(ptr[len]); ptr[len--] = NULL;}\n if (free_seg) free(ptr);\n}\n\nfreev(ptr, N, TRUE); /* if known length */\nfreev(ptr, -1, TRUE); /* if NULL-terminated */\nfreev(ptr, -1, FALSE); /* to keep array */\nRun Code Online (Sandbox Code Playgroud)\n\nGLib函数:
\n\ng_ptr_array_free()用于释放指针数组,g_strfreev()用于释放字符串数组。我发现如果没有 GLib,就很难进行任何严肃的 C 编程。它介绍了动态字符串等内容,并为函数式编程奠定了基础。它确实应该是标准 C 运行时库的一部分。这会让C呼吸新鲜空气。这将使 C在 2019 年再次成为一种合理且有竞争力的语言。但因为它不是 \xe2\x80\x99t,所以它将为您的应用程序增加 1 MB(无论是 DLL 大小还是可执行文件大小)。Windows 发行版也是由虐待狂维护的。
\n