char * to char [] - 免费必要吗?

时间:2012-05-16 07:40:37

标签: c char

假设以下情形:

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 个答案:

答案 0 :(得分:7)

您只需要free()所拥有的内容malloc()。因此:不。

另请参阅free()的联机帮助页:

  

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

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

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

答案 1 :(得分:4)

您从未致电malloc(),因此您无需致电free()

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

答案 2 :(得分:3)

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

答案 3 :(得分:1)

char str[1024]将在当前堆栈中分配1024个字节。当函数返回时,此空间将自动“弹出”。因此,您无需明确释放此内存。