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

我编写了一个load()返回*head, 函数用来读取文件(里面存有struct类型的数据)并且把它载入一个链表,用下面的小函数检验了一下没有问题但是我产生一些疑问想不通:在load()中我用malloc()给这个链表分配了内存,我没有用free(),那么load()这个子函数,运行时分配的内存时候被释放呢?一个程序运行过程,内存是这么分配(回收)的呢?子函数运行的内存呢?还有对于子函数变量的内存什么时候收回?
(本人大一,请牛人稍微解释下)
void main()
{

struct student_link *a;
a=load();
printf("姓名是:%s\n",a->next->name);
}

对于好的回答我一定不会吝惜分数的

你的问题我没听懂

大一的, 那我就通俗一点吧

你使用malloc分配内存返回一个指针p, 你必须得在以后的一个地方使用free(p)来释放之前分配的内存,否则内存泄露了, 也就是说malloc与free必须得成对的出现,否则你的程序就有问题

你上面的程序是肯定有问题的

你明明知道malloc出来的内存是需要手动的free的, 但你没有做free操作

楼上两位答的说的是普通变量的内存分配

普通变量的内存分配与malloc的分配是不一样的,普通局部变量是在栈里边分配的, 这种变量在函数使用完了之后会自动释放内存, 但malloc分配的内存是在堆里分配的,这种内存在C和C++中是需要手动释放的,JAVA与C#则可以不要释放,因为有一个垃圾回收机制在里边
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-07-05
子函数里 随着变量的生命周期开始 为变量分配内存 随着 生命周期的结束 释放内存;这样在子函数里用指针不适当就会造成内存泄漏

比如 你在做数学试卷,当做到一题 已知 a b c要计算 f(a,b,c)的值

但f(a,b,c)是一个很复杂的式子,要涉及到化简等许多中间过程
你不可能直接就在试卷上写写画画的
这个时候 你就需要拿出 草稿纸 , 记录上一些你需要的数据 (分配内存)
然后计算得到 结果 (返回值) 算完了 你就在试卷上填上答案
这个时候 草稿纸 你不要需要了,上面的东西也不需要 丢了也可以(内存释放)

不知道这样 打比方 有没有懂!
第2个回答  2010-07-05
内存的分配时 根据 变量的作用域
如果是全局变量,那么只有在最后才回收
如果是局部变量,那么运行过了作用域,那么就会被回收
例如
#include <iostream>
using namespace std;
int a;
void f()
{
int d;
}/回收d

int main()
{
int b;

for (b=1;b<=10;b++)
{
int c;

}/回收c
return 0;
}/回收b
回收 a
相似回答