个人对于堆栈的理解(简单通俗)

    最近在做安装包(Inno Setup),也没好好看C++,然后安装包出了点小问题,说是堆溢出,自己也没理解透堆栈这个概念,在这里我就简单的总结一下。

  1.堆

    在C++ 中,只有程序员自己分配的内存才会储存到堆中,比如int *b = (int *)malloc(sizeof(int)*1)  这就算自己手动分配的一个,然后它就储存在堆中,当你两次调用的时候会发现,即使你不手动释放内存,它的内存地址也会改变,所以造成的就是你越不释放,然后不停的new内存就会越来越少,直到没有。

  2.栈

    当然,在栈中刚好相反,比如int i = 0;  好,这个系统就自动分配到栈中,它会有一个内存地址,比如0X00b121c0,如果你不释放,再重新调用的话,它的内存地址还是不会变的,即使你把里面的内容拷贝替换了,下次还会给你分配这个地址,内容就是你替换的内容

 

说的....我都想抽自己了,举例说下,就是说:

int main()

{

test();//第一次调用会发现copy的远远超出了i,然后再看地址会发现,红色不坎入目

test();

  }

void test()

{

    int i;

   int j;

    char temp[] = "asdjklwqid";

   strcopy(i, temp);

    return 0;

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NotOrdinary

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值