1

假设以下场景:

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 并释放它以避免内存泄漏?

只是我正在考虑的一个理论问题。

4

4 回答 4

8

你只需要free()你已经malloc()编辑过的东西。因此:没有。

另请参阅free()手册页:

free() 函数释放 ptr 指向的内存空间,该内存空间必须由先前对 malloc()、calloc() 或 realloc() 的调用返回。否则,或者如果之前已经调用过 free(ptr),则会发生未定义的行为。如果 ptr 为 NULL,则不执行任何操作。

请注意,其他函数可能malloc()在内部使用或类似,因此也需要释放返回的缓冲区(例如strdup)。

NULL根本不需要将指针设置为。free()然而,它增加了一些便利,因为对该指针的后续调用不会将应用程序暴露给未定义的行为。而且,如果始终如一地完成,您可以检查指针是否确实指向一个对象。

于 2012-05-16T07:41:48.677 回答
4

你从来没有打电话malloc(),所以你不需要打电话free()

您拥有的是指向堆栈上字符数组的指针,它不需要显式释放。

于 2012-05-16T07:41:54.227 回答
3

不,只要您不分配内存(在堆上),您就不需要释放它。有一些例外(例如strdup),但这是一般规则。

于 2012-05-16T07:42:21.133 回答
1

char str[1024]将在当前堆栈中分配 1024 个字节。而这个空间会在函数返回时自动“弹出”。所以你不需要显式释放这个内存。

于 2012-05-16T08:26:27.127 回答