在哪里释放在函数内创建的动态数组的内存

ont*_*cks 2 c++ local-variables delete-operator

这是参考本主题中的讨论, 如何将char指针作为C++函数的out参数

在下面的代码中,我在哪里释放pTemp的内存?这不是必需的吗?如果不是字符数组而不是整数数组,事情会不会发生变化?

void SetName( char **pszStr )
{
    char* pTemp = new char[10];
    strcpy(pTemp,"Mark");
    *pszStr = pTemp;
}

int main(int argc, char* argv[])
{
    char* pszName = NULL;
    SetName( &pszName );
    cout<<"Name - "<< pszName << endl;
    delete [] pszName;
    cin.get();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Mik*_*our 8

你分配pTemp*pszStr,并pszStrpszName.

因此,delete [] pzxName根据需要删除分配的内存.

混乱是一个很好的例子,为什么你应该避免奇怪的C风格的习语和手动内存管理.它将更加清晰:

#include <string>
#include <iostream>

std::string GetName() {return "Mark";}

int main() {
    std::string name = GetName();
    std::cout << "Name - " << name << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

没有指针,newdelete需要.