从函数返回malloced指针,是否会导致内存泄漏?

k0n*_*3ru 2 c++ malloc pointers memory-leaks memory-management

我有一个函数foo喜欢

myType** foo(){

    myType **array = malloc( .... );
    //Do some stuff
    return array;
}
Run Code Online (Sandbox Code Playgroud)

在这里我有malloced,但没有释放它,因为我返回它.这会导致内存泄漏吗?我使用它后,我应该在调用函数中明确释放它吗?

Luc*_*ore 5

仅当您不释放内存(无论在何处)时,这都是内存泄漏。

在这种情况下,您应该free在调用函数并完成指针操作后执行此操作。

但这是C的方式。在C ++中,您将返回一个智能指针,并使用new代替malloc


jua*_*nza 5

使用这种类型的函数,调用者是指针指向的资源的"所有者".因此呼叫者必须释放资源,或者将其传递给其他人.

在C++中,人们倾向于返回一个管理自己资源的类型,例如一个std::vector或一个智能指针,它们既负责资源取消分配又使所有权变得清晰.

请参阅此示例,不要担心,请阅读有关复制省略的所有信息,特别是命名返回值优化(NRVO).

std::vector<std::vector<SomeType>> foo()
{
  std::vector<std::vector<SomeType>> tmp = ....;
  // do some stuff
  return tmp;
}
Run Code Online (Sandbox Code Playgroud)