C++的内存分配问题

Posted wx5acf76b593c6d

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++的内存分配问题相关的知识,希望对你有一定的参考价值。

char *fun(void)

char *p="hello";

return p;

int main(void)

char *s;

s=fun();

printf("%s\\n",s);

程序运行后有什么问题呢?

一般人可能会回答说是内存错误,实际上不是,

char *p="hello";

分配在常量区,不会立即释放。


如果是如下的程序

char *fun(void)

char p[]="hello";//注意

return p;

int main(void)

char *s;

s=fun();

printf("%s\\n",s);

很多人回答说是会出错。而我在运行过程中,却没发现出错。

原因如下:

如果对已经释放了的内存进行读写操作,那这个行为导致的结果是未定义的。
“未定义”就是说随着程序的运行情况而定,有时候这次运行你去读,没有问题,依旧能读取东西出来;但是下一次运行,未必能成功。更严重的情况就是导致崩溃。


以上是关于C++的内存分配问题的主要内容,如果未能解决你的问题,请参考以下文章

内存堆问题 C++,动态分配多维数组

C++ 中 vector 如何实现内存分配

C++ 中的局部变量通常在啥时候分配内存?

C++ 无法在我的 Windows 应用程序中重写共享内存。它分配新的内存

C++ 关于内存泄露问题。内存泄露是指用new 分配的内存没有用delete释放,如果未释放会有啥后果?

C++中内存分配问题