错误代码:
char *func()
{
return "123";
}
main()
{
char *p=new char[32];
p=func();
delete p;
}
错误分析:p刚开始指向堆上一段内存,后来指向常量(程序运行期间始终存在于一段内存里),delete释放的就不是刚开始开辟的那段堆上内存。
这错误属于new和delete理解不到位,问题出在外部调用函数。
另外一种常见错误返回函数内的指针时,要注意在函数返回后是否被销毁,问题出在函数内,如下:
定义指向常量区的指针
char *GetString(void)
{
char *p = "hello world";
return p;
}
这样p是指向常量区的指针,这个值可以做为函数返回值返回的
函数结束以后,变量p就不存在了
char *GetString(void)
{
char p[] = "hello world";
return p;
}
这样p是局部字符数组变量,内容是从常量区复制过来的
函数结束以后p就消失了,所以这个返回是不行的
这两个不同就在于指针指向的地址不同,
char *p, 函数结束后,地址存在,
char p[], 函数结束后,地址无效了