Jim*_*tle 2 c++ memory dynamic
我是 C++ 新手,对内存泄漏很偏执。我将把代码精简为重要的部分:
如果我有一个这样的函数:
char * myString = "Discombobulate";
char * ToUppercase()
{
int length = strlen(myString);
char * duplicateString = new char [length];
strcpy(duplicateString, myString);
//char arithmetic to turn every letter in duplicateString to uppercase
return duplicateString;
}
Run Code Online (Sandbox Code Playgroud)
显然,我需要执行删除[]以避免内存泄漏。现在我想知道是否可以在 main() 中进行删除,如下所示:
int main () {
char * result = Upper();
std::cout << result << std::endl;
delete[] result;
}
Run Code Online (Sandbox Code Playgroud)
这能正常工作吗?这样做有什么问题吗?
现在我想知道的是我是否可以在 main() 中进行删除
是的,你可以而且应该。
BTW1:考虑使用std::string、std::vector、智能指针,以避免这种手动内存管理,因为它是 C++。
顺便说一句2:
char * duplicateString = new char [length];
Run Code Online (Sandbox Code Playgroud)
应该
char * duplicateString = new char [length + 1];
Run Code Online (Sandbox Code Playgroud)
最后一个位置将用于终止空字符'\0'。