gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 00:25:30 24 4
gpt4 key购买 nike

想象一下这段代码:

#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;
}

我是否需要 free() get_string 函数中的 temp 变量?如果 main() 中的 get_string 代码会怎样?

最佳答案

自由调用仅适用于动态分配的内存,不适用于静态内存分配

所以如果有任何使用 malloc/calloc 动态分配的东西需要在指定内存块的引用计数将达到零时释放,另一方面静态分配的内 stub 本不能释放,程序本身我想将无权释放静态分配的内存

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

以防万一,警告被忽略会导致运行时崩溃

* 检测到 glibc ./a.out: free(): 无效指针: *

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

关于在函数内部声明的 C 自由变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16506579/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com