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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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