c中申请释放内存问题

来源:百度知道 编辑:UC知道 时间:2024/06/17 08:53:06
参照一下程序,为了简单起见,返回值校验省略。
#include <stdio.h>
#include <stdlib.h>
#inlcude <string.h>
char * getstr();
int main()
{
char * ch;
ch = getstr();
free(ch);
}
char * getstr()
{
char * mal;
mal = malloc(100);
strcpy(mal, "hello");
return mal;
}

一个简单的内存分配释放程序,我想问一下,在getstr()分配的内存能不能在main()函数中调用free()函数释放掉呢?

可以。

碰到好问题,很难免多说2句,虽然人们一直认为用malloc申请的内存不会被操作系统释放,其实不是这样的。用malloc申请依然会被释放。至于深层原因需要对操作系统的内存管理一章有深层了解,有点偏题了。

目前我碰到的代码中没有被释放的内存绝大部份都和文件有关。比如说管道pipe,进程共享内存段,一些利用文件来实现进程资源共享的不会被释放。还有就是数据库链接。文件描述结构file等。

完全可以,malloc分配的内存可以在任何地方被free释放,所以在main中释放当然可以

完全可以

当然了,在调用free函数的时候你括号里面的内容是一个指针指向想释放掉的内存的地址,所以你只要是把在getstr()中的地址传回main函数中就可以在main函数中free啦,呵呵