gpt4 book ai didi

c - 为什么free不释放内存?

转载 作者:行者123 更新时间:2023-11-30 19:26:05 25 4
gpt4 key购买 nike

我是C语言新手,我正在尝试使用Malloc动态分配内存,然后使用“free”释放内存。

我尝试过在谷歌上搜索,但自从我刚开始学习以来它到目前为止没有任何意义。

#include <stdio.h>
#include <stdlib.h>

int main (){
printf("Enter your name:");


//Here I allocate enough memory for the "sir" array.

//allocate memory
char *sir = (char*) malloc (100 * sizeof(char));

//scan string. I am scanning a name e.g.: John Smith
scanf("%[^\n]", sir);
//size of sir
int size = strlen(sir);
printf("String size with strlen = %d\n", size);

//printing the string
for(int i = 0; i < size; i++){
printf(" %d = [%c] ", i ,sir[i]);
}
//Printing J o h n _ S m i t h
//Here I release the memory allocated

//release memory
free(sir);

//print the string after releasing memory
printf("\n\n");
for(int i = 0; i < size; i++){
printf(" %d = [%c] ", i ,sir[i]);
}
//Printing _ _ _ _ _ S m i t h

//After the above loop, I still have some input as well as some memory which I can access.

// I do not understand why free does not release whole memory.
return 0;
}

我期望在 free(sir) 行之后,我尝试访问的内存为空/无法访问。

我理解错了吗?

提前谢谢您。

最佳答案

这是预期的未定义行为。调用free后,您的指针仍将指向相同的地址。对 malloc 的另一次调用现在可以使用释放的内存,否则这些内存将被保留。但是,如果尚未向该地址写入任何内容,则其内容仍将相同,并且由于您的指针仍指向它,因此您可以打印该字符串。一般来说,free 用于内存管理,而不是用于将内存设置为任何值。

永远不要在实际代码中这样做,释放后使用是一个巨大的安全风险。

编辑:澄清一下,即使没有写入任何内容,您也可能根本无法访问内存。再说一次,没有办法事先知道。

关于c - 为什么free不释放内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57952842/

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