c++ - 在哪里释放在函数内部创建的动态数组的内存

标签 c++ local-variables delete-operator

这是引用此处本主题中的讨论 How to have a char pointer as an out parameter for C++ function

在下面的代码中,我在哪里释放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;
}

最佳答案

您正在将 pTemp 分配给 *pszStr,并且 pszStr 指向 pszName

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

混淆是一个很好的例子,说明为什么你应该避免奇怪的 C 风格习惯用法和手动内存管理。这样会更清楚:

#include <string>
#include <iostream>

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

int main() {
    std::string name = GetName();
    std::cout << "Name - " << name << std::endl;
}

没有指针,需要newdelete

关于c++ - 在哪里释放在函数内部创建的动态数组的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12194760/

相关文章:

c++ - 程序没有进入 main()

c++ - 编写函数以在 C++ 中复制链表

java - 编译器警告 : local variable is redundant

c++ - C++中的局部变量问题

c++ - 如何清除堆上分配的未使用数组的整个内存

c++ - 删除数组的 SFML 析构函数问题

c++ - thrift 中的大量同时连接

c++ - 为什么不调用构造函数?

local-variables - (GNU) 第四局部变量行为

c++ - 如何检测 C++ 中未分配内存的双重删除或删除?