作业帮 > 综合 > 作业

急,请问一个C语言问题

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/09 03:19:37
急,请问一个C语言问题
主函数调用子函数时,比如在子函数中生成的临时变量当子函数调用完时它也就销毁了,但是像生成链表这样的例子,在子函数中用malloc函数新开辟一段空间然后再把它们的地址返回主函数,这里就有点搞不清楚了,为什么这段新开辟的空间不会像前面说的临时变量一样在子函数调用完时就销毁呢?请说的具体一点,
从内存开始跟你说起
内存为数据区 代码区
数据区又分为 栈区 静态区 堆区
栈区 是函数调用时创建的,为函数参数变量申请空间,函数退出时释放,不用程序员参与.
静态区 编译器运行时一直存在,由编译器负责分配,程序退出时释放,不用程序参与
堆区 程序根据需要用malloc创建的内存 由程序员用free释放
所以说你在子函数里面定义的变量以属于栈区 由系统自动在函数退出时释放
而你用malloc创建的空间 系统却不会为你释放 要销毁的话 由你自己用free释放
懂了么?
在补充一下 栈区存放局部数据和参数 静态区存放程序的全局变量和静态变量
堆区存放 程序动态申请的数据
再问: 谢谢你了,那这些栈区堆区静态区,他们在电脑中的哪个位置呢,是寄存器里还是哪里啊?
再答: 不用知道存哪了,只知道C语言内存分配这回事就行了。