先占坑,观察这几个区别:
char* GetMemory()
{static char p[] = "hi"; //这种内存数据会一直存在
return p;
}
void main()
{
char *str = GetMemory(); //
printf(str);
}
---------------------------------------------------------------------------------------------------------
char* GetMemory()
{
char *p = new char[100];
return p;
}
void main()
{
char *str = GetMemory();
delete [] str; //防止内存泄露!
}
-------------------------------------------------------------------------------------------------------------
char* GetMemory()
{char p[] = "hi"; //
return p;
}
void main()
{
char *str = GetMemory(); //
printf(str);
}
1、主要考察的是C的内存分配问题,第一个程序静态存储区,即使结束函数调用,p也会一直存在。能够正常使用。静态存储区存储全局与静态变量。
第二个使用动态分配内存形式,常见的有malloc与new等,这种形式声明的变量存储在堆内存。第三个函数局部变量存储在栈区,函数调用结束,内存段数据销毁,所以3不会显示hello。