这是引用此处本主题中的讨论 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;
}
没有指针,需要new
或delete
。
关于c++ - 在哪里释放在函数内部创建的动态数组的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12194760/