这样会导致内存泄露?
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这样的写法是被禁止的。