数据结构入门(五)——预备知识(4)——内存的跨函数使用

前言

本系列文章是笔者学习数据结构的笔记,如有不妥之处欢迎指正



静态内存(局部变量)

  • 主调函数调用被调函数时,被调函数中申请分配的静态内存仅在被调函数运行时生效,被调函数运行结束之后该内存立即被释放
#include<stdio.h>

int f(int **p);

int main()
{
    int *p; 	//此时仅声明了一个int *类型的指针变量,但是并没有对该变量赋值,此时该指针非法

    f(&p); 		//调用f()函数,此时f()内部申请分配的内存开始生效
    
				//当函数调用结束时,静态分配的内存被释放,指针p又变为非法指向
    return 0;   //即在被调函数中申请分配的静态内存仅在被调函数运行时有效
   			    //被调函数运行完毕被调函数中申请分配的内存立即被释放
}

int f(int **p)  //将主函数中指针的地址传送进来,故使用int **p
{
    int s = 3;  //在调用该函数时对系统申请分配了一块内存

    *p = &s;    //此时main()函数中的指针有了指向,main()函数中的指针p指向合法
}

动态内存

  • 程序运行时申请分配的动态内存在被释放(free())前一直生效,直到程序结束
  • 因此手动分配的内存非必要时必须及时释放否则会造成内存泄漏1
#include<stdio.h>
#include<stdlib.h>

int main()
{
    int *p; 	//此时仅声明了一个int *类型的指针变量,但是并没有对该变量赋值,此时该指针非

    f(&p); 		//调用f()函数,此时f()内部申请分配的内存开始生效
 				//当函数调用结束时,因为f()函数中分配的动态内存并没有被释放,因此指针p指向仍然合法
    return 0;
}

int f(int **p);
{
   *p = (int *)malloc(sizeof(int));  //申请分配动态内存
}

  • 综上所述:跨函数使用内存只能通过动态内存实现

  1. 指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况,即可用内存越来越少 ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值