最近在做安装包(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;
}
转载请注明原文地址: https://ju.6miu.com/read-770.html