vc++6.0环境,关于函数(程序)内存 malloc(),链表

[复制链接]
查看11 | 回复3 | 2010-7-9 14:17:04 | 显示全部楼层 |阅读模式
我编写了一个load()返回*head, 函数用来读取文件(里面存有struct类型的数据)并且把它载入一个链表,用下面的小函数检验了一下没有问题但是我产生一些疑问想不通:在load()中我用malloc()给这个链表分配了内存,我没有用free(),那么load()这个子函数,运行时分配的内存时候被释放呢?一个程序运行过程,内存是这么分配(回收)的呢?子函数运行的内存呢?还有对于子函数变量的内存什么时候收回?
(本人大一,请牛人稍微解释下)
void main()
{

struct student_link *a;
a=load();
printf("姓名是:%s\n",a->next->name);
}
对于好的回答我一定不会吝惜分数的

回复

使用道具 举报

千问 | 2010-7-9 14:17:04 | 显示全部楼层
你的问题我没听懂大一的, 那我就通俗一点吧 你使用malloc分配内存返回一个指针p, 你必须得在以后的一个地方使用free(p)来释放之前分配的内存,否则内存泄露了, 也就是说malloc与free必须得成对的出现,否则你的程序就有问题你上面的程序是肯定有问题的你明明知道malloc出来的内存是需要手动的free的, 但你没有做free操作 楼上两位答的说的是普通变量的内存分配普通变量的内存分配与malloc的分配是不一样的,普通局部变量是在栈里边分配的, 这种变量在函数使用完了之后会自动释放内存, 但malloc分配的内存是在堆里分配的,这种内存在C和C++中是需要手动释放的,JAVA与C#则可以不要
回复

使用道具 举报

千问 | 2010-7-9 14:17:04 | 显示全部楼层
内存的分配时 根据 变量的作用域如果是全局变量,那么只有在最后才回收如果是局部变量,那么运行过了作用域,那么就会被回收例如#include using namespace std;int a;void f(){ int d;}/回收d int main(){intb;
回复

使用道具 举报

千问 | 2010-7-9 14:17:04 | 显示全部楼层
子函数里 随着变量的生命周期开始 为变量分配内存 随着生命周期的结束释放内存;这样在子函数里用指针不适当就会造成内存泄漏比如 你在做数学试卷,当做到一题 已知 a b c要计算f(a,b,c)的值 但f(a,b,c)是一个很复杂的式子,要涉及到化简等许多中间过程你不可能直接就在试卷上写写画画的这个时候 你就需要拿出 草
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行