上一节了解到内存四区的概念,并应用了其中栈区和全局区的知识,而代码区对我们透明;那么就在继续了解一下堆区吧。
堆区—----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就存储在栈区,所以局部变量或临时变量的地址不能返回
-------------局部变量不能把内存的块返回回来的
好像没啥意思哈^_~
就是理解一下现象出现的背后原因。
学无止境,道阻且长,记录分享一下学习的过程