上一節瞭解到內存四區的概念,並應用了其中棧區和全局區的知識,而代碼區對我們透明;那麼就在繼續瞭解一下堆區吧。
堆區—----malloc、new、free、delete
//堆區存放
char *getmem(int num)
{
char*p1 = NULL;
p1 = (char*)malloc(sizeof(char)*num);
if (p1 == NULL)
return NULL;
else
return p1;
}
//棧區存放
char *getmem2()
{
char p2[64];
strcpy(p2, "23456");
return p2;
}
void main()
{
char *as = NULL;
as = getmem(6);
if (as == NULL)
return;
strcpy(as, "12345");//往as指針指向的內存空間拷數據
printf("as:%s\n", as);
as = getmem2();
printf("as:%s\n", as);
system("pause");
return;
}
發現debug調試出錯,release可以通過,
上篇的p的是全局區的返回,全局區的是操作系統管理,程序退出後清理或者主動釋放,而棧區在運行完這個子程序就被清理了,這裏的p2就存儲在棧區,所以局部變量或臨時變量的地址不能返回
-------------局部變量不能把內存的塊返回回來的
好像沒啥意思哈^_~
就是理解一下現象出現的背後原因。
學無止境,道阻且長,記錄分享一下學習的過程