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

这样会导致内存泄露?解决方法

2012-03-07 
这样会导致内存泄露?char*p(){char*s(char*)malloc(128)returns}char*tmpp()请问这样怎么会导致泄露

这样会导致内存泄露?
char*   p(){
        char*   s=(char*)malloc(128);
        return   s;
}

char*   tmp=p();


请问这样怎么会导致泄露呢?为什么说“谁分配,谁回收”
我对这个原理还不明白,请大家帮忙!

[解决办法]
“谁分配,谁回收”是说你有了一个分配内存的函数,那么就应该设计一个相应的释放该内存的函数,而不是说一定要在p()函数里释放。
[解决办法]
如果你在使用C++,那么可以有更好的解法:
auto_ptr <char*> p() {
auto_ptr <char*> s=new char[128];
return s;
}
这样不需要free,也不会内存泄漏。
这是智能指针,会自动释放内存和资源。也可以用share_ptr等。用法和普通指针一样。
[解决办法]
当你的函数是公函的时候,是写给别人调用的,你在函数里用malloc分配了空间后,调用的人他并不知道你写的函数具体的实现,这样就容易造成内存泄露了。“谁分配,谁回收”在这种情况下是非常合理的,自己写的小程序无所谓,但最好遵循这样的规则,培养编程习惯;
像类似这样的函数一般不利用返回值,而是利用参数:
void p(char * s){
...
s= "abcd... ";
...
}
char* tmp=(char*)malloc(128);
p(temp);
free(temp);
[解决办法]
longshanks(longshanks)的代码有点小问题:

auto_ptr <char*> p() {
auto_ptr <char*> s=new char[128];
return s;
}

auto_ptr <char*> tmp=p();

首先应该是auto_ptr <char> 而不是auto_ptr <char*> 。
其次,auto_ptr的构造函数是explict的,所以auto_ptr <T> = pt这样的写法是被禁止的。

热点排行