首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于内存泄露的有关问题

2012-03-03 
关于内存泄露的问题#include iostream.hchar*GetString(){char*ppnewcharpfafds returnp}voidou

关于内存泄露的问题
#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指向的空间没有任何动作

至于那块景泰区内存空间,由操作系统管理

热点排行