在函数内部声明的C自由变量



想象一下下面的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSTRSIZE 2048    
int main()
{
    char *str;
    str = get_string();
    return 0;
}
char * get_string()
{
    char temp[MAXSTRSIZE], *str;
    fgets(temp,MAXSTRSIZE,stdin);
    str = malloc( sizeof(char) * (strlen(temp) + 1) );
    strcpy(str, temp);
    return str;
}

我需要在函数get_string中释放()temp变量吗?如果get_string代码在main()内部呢?

free调用仅适用于动态分配的内存,而不适用于静态内存分配

因此,如果使用malloc/calloc动态分配的任何东西需要在指定内存块的引用计数达到零时被释放,另一方面,静态分配的内存必须根本不被释放,我认为程序本身没有权利释放静态分配的内存

如果您尝试释放静态内存编译器,理想情况下会在编译时抛出警告,如下所示尝试释放非堆对象

,如果忽略警告,则在free

时将出现很好的运行时崩溃。

* glibc发现 。/。输出:free():无效指针:*

永远不要尝试释放非堆对象

调用者需要确保str被释放。temp不是动态分配的,所以你不能释放它。

你必须free()无论你malloc(),这并不重要何时何地,但它必须发生,以防止内存泄漏。当free()被调用时,该指针不能再被解引用。

注意get_string()必须在main()之前声明或定义。

您不需要(绝对不能)释放temp变量,但您需要在main中释放str(因为它是get_string中的malloc)。

相关内容

  • 没有找到相关文章

最新更新