假设以下场景:
while(!notTheEnd) {
char str[1024];
char* ptr_to_str;
/* some strcat, strcpy on str */
ptr_to_str = str;
chmod(ptr_to_str, 0777);
}
我是否必须设置 char* ptr_to_str = NULL 并释放它以避免内存泄漏?
只是我正在考虑的一个理论问题。
你只需要free()
你已经malloc()
编辑过的东西。因此:没有。
另请参阅free()手册页:
free() 函数释放 ptr 指向的内存空间,该内存空间必须由先前对 malloc()、calloc() 或 realloc() 的调用返回。否则,或者如果之前已经调用过 free(ptr),则会发生未定义的行为。如果 ptr 为 NULL,则不执行任何操作。
请注意,其他函数可能malloc()
在内部使用或类似,因此也需要释放返回的缓冲区(例如strdup)。
NULL
根本不需要将指针设置为。free()
然而,它增加了一些便利,因为对该指针的后续调用不会将应用程序暴露给未定义的行为。而且,如果始终如一地完成,您可以检查指针是否确实指向一个对象。
你从来没有打电话malloc()
,所以你不需要打电话free()
。
您拥有的是指向堆栈上字符数组的指针,它不需要显式释放。
不,只要您不分配内存(在堆上),您就不需要释放它。有一些例外(例如strdup
),但这是一般规则。
char str[1024]
将在当前堆栈中分配 1024 个字节。而这个空间会在函数返回时自动“弹出”。所以你不需要显式释放这个内存。