当我删除给定函数“lowerCaseWord(char* a)”的 b 的内存时?我需要返回b的值,所以不能在“return b;”这一行之前删除它。我需要使用另一个变量吗?还是编译器单独删除它(即使它不是很好的编程)?
char* lowerCaseWord(char* a)
{
char *b=new char[strlen(a)];
for (int i = 0; i < strlen(a); i++)
{
b[i] = tolower(a[i]);
}
return b;
最佳答案
您需要自己在函数外删除[]
它,尽管这不是一个好的做法。如:
char* rtv = lowerCaseWord(a);
// process with rtv
// ...
delete[] rtv;
最好用smart pointer避免手动内存管理,例如:
std::unique_ptr<char[]> lowerCaseWord(char* a)
{
...
}
然后
std::unique_ptr<char[]> rtv = lowerCaseWord(a);
// process with rtv
// ...
正如@FrerichRaabe 指出的那样,基本上使用原始指针不是一个好主意,您可能想直接使用 std::string
。
关于c++ - 何时删除返回值的已分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34945706/