C/C++谁申请谁释放原则

在C/C++中有一个原则“谁申请谁释放”,那么下面的代码符合这个原则么?

 char *fun()
 {
        char *result = malloc(100);
        return result;
 }

 int main()
 {
     char *str = fun();
     free(str);
 }
c++

7个回答

不符合。应该主程序申请,将缓冲区指针传给函数,函数将结果填入。

例子:Windows API函数 GetWindowText,可以获取指定窗口的标题,函数原型

int WINAPI GetWindowText(
HWND hWnd,
LPTSTR lpString,
int nMaxCount);

很明显,除了传递需要获取的窗口句柄,剩下两个参数分别是缓冲区指针和缓冲区长度。

rejoy2009
rejoy2009 但是在C++中会有这种情况啊,比如一个工厂函数 Product *createProduct() { Product *p = new Product; return p; } 那这个肯定是要由调用方来负责释放啊。。。
5 年多之前 回复

但是在C++中会有这种情况啊,比如一个工厂函数

 Product *createProduct()
 {
     Product *p = new Product;
     return p;
 }

那这个肯定是要由调用方来负责释放啊。。。

这么写是不符合谁申请谁释放的。COM组件使用引用计数来避免这个问题,参考:
http://www.cnblogs.com/fangyukuan/archive/2010/06/06/1752621.html

我怎么感觉是可以的。。。。。。。。。。。上面大家都说不可以。。

“谁申请谁释放” 这个“原则”,我的理解是那一个**模块/对象**申请的,就由那一个**模块/对象**来释放。能解决不同库中重载new方法导致的问题等。
楼主的代码中, 申请内存的是一个全局函数,如果是有精神洁癖的,当然可以写一个全局函数来释放内存,但是在main函数里面释放,也未尝不可。

不可以,函数是不允许返回局部变量的地址的

还需要定一个release函数,然后它来释放malloc分配的指针

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐