以下是3个函数。 main()按预期打印出来。 现在,在mycharstack()字符串存储在堆栈我猜,所以“ch”超出范围,它不应该能够返回字符串。它如何正确工作? 我猜存储在mychar()中的字符串也在堆栈中。它应该正常工作吗? 我想代码和内存泄漏还有其他错误,请告诉我是否有任何错误。使用std :: string我可以更轻松地完成这些清洁工作&。但我想了解char *发生了什么。从函数返回char *
#include <iostream>
using namespace std;
char* mychar()
{
return "Hello";
}
char* mycharstack()
{
char* ch = "Hello Stack";
return ch;
}
char* mycharheap()
{
char* ch = new char;
ch = "Hello Heap";
return ch;
}
int main()
{
cout << "mychar() = " << mychar() << endl;
cout << "mycharstack() = " << mycharstack() << endl;
cout << "mycharheap() = " << mycharheap() << endl;
system("PAUSE");
return 0;
}
If我刚刚用我在代码中提到的那个替换了mycharheap(),但仍然会泄漏......对吧?在main()中没有人释放分配的内存。 – ontherocks
是的。看到我更新的答案。 – nothrow
因此,对于像mycharheap()这样的函数,不建议将其直接用作其他函数中的参数,这些函数以char *作为输入参数。例如,说有一个函数print(char * char_in);''我不应该像'print(mycharheap());'那样做。这会导致内存泄漏。我对吗? – ontherocks