关于内存泄露的问题
#include <iostream.h>
char *GetString()
{
char *p;
p = new char;
p = "fafds ";
return p;
}
void output()
{
char* pGet = GetString();
cout < <pGet < <endl;
}
int main()
{
output();
return 1;
}
请问这段小程序会造成内存泄露吗?
[解决办法]
可能会损失一个字节的内存,主要在p = new char;new申请了一个字节大小的堆内存区域,并把地址交给P
,后有用 "fafds "这个静态内存区域地址重新赋值P,那一个字节的动态内存就丢失了。即使此时free P也
是不起作用的了。
char *GetString()
{
char *p;
p = new char;
p = "fafds ";
return p;
}
直接写成
return "fafds ";就不会有内存丢失的情况了。
[解决办法]
char *GetString()
{
char *p; //No1
p = new char; //No2
p = "fafds "; //No3
return p; //No4
}
对这段代码逐行分析:
1:在函数体内定义了一个char*类型的变量,没有赋初值,野指针
2:在堆内存中动态分配了一个字节的内存空间,类型为char,把这块内存的 地址 赋给p
3:在静态区内存中分配了一块连续空间,值为 "fafds ",把这块内存的 首地址 赋给p
此时没有一个指针指向第二句中分配的内存,内存泄露
4:把p的值赋给一个临时变量,作为函数返回值,同时销毁局部变量p,销毁的是p这个指针的空间,对p指向的空间没有任何动作
至于那块景泰区内存空间,由操作系统管理