函数中的变量使用的栈区的内存,函数调用结束后栈区的内存是要被释放掉的。
例一:
char* p="Hello World1";//静态区数据,可以访问,不可以赋值
chara[]="Hello World2";//存于数组中,此数据存储于栈区,对它的修改没有任何问题
char* p1 ="Hello World1";//p 和p1 存的地址是完全相同的
例二:
char *f1()
{
char*p =NULL;
char a;
p=&a;
return p;
}//可以返回指针,但是指针没有意义,因为栈区的a会在函数调用后释放掉,将返回未知的空间
char *f2()
{
char *p=NULL;
p=(char*) new char[4];
return p;
}//返回在堆区申请的空间,对区的好处是可以自己控制变量的生存期
需要记住的内存使用准则:
1、用malloc或new申请内存之后,应该立即检查指针值是否为NULL。防止指针值为NULL的内存。
2、不要忘记为数组和动态内存赋初值。防止将未被初始化的内存作为右值使用。
3、避免数组或指针的小标越界,特别要当心发生“多1”或者“少1”操作。
4、动态内存申请释放必须配对,防止内存泄漏。
5、使用free或delete释放内存之后,立即将指针设置为NULL,防止产生“野指针”。