以下是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