从函数返回动态数组后将其删除

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)

这能正常工作吗?这样做有什么问题吗?

son*_*yao 5

现在我想知道的是我是否可以在 main() 中进行删除

是的,你可以而且应该。

BTW1:考虑使用std::stringstd::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'