要實現的重要事情,並且在評論和其他答案中指出,您正在泄漏內存。
char* foo()
{
// Do things
char* info = malloc;
strcpy(info, "Hello");
return info;
}
int main()
{
if (foo())
{
std::cout << "Success" << std::endl;
}
}
到foo()
的調用是有效的,因爲它返回的不是一個nullptr
條件爲真;但是,您已泄漏由foo()
分配的內存,因爲一旦foo()
返回,您已經丟失了指向它的內存。
您可以將指針存儲在相同的條件下,如果你想:
if (char* f = foo())
{
std::cout << "Success" std::endl;
// Deallocate f
}
這將調用foo()
,結果賦予f
和檢查有效的指針。
否則,您可以通過簡單地使用std::string
解決這個問題(或者,如果你正在使用的東西,是不是char*
,你可以只使用std::unique_ptr
):
std::string foo()
{
// Do things
std::string info = "Hello";
return info;
}
int main()
{
if (foo().length()) // does foo contain a valid string?
{
std::cout << "Success" << std::endl;
}
}
來源
2016-12-14 05:54:29
Tas
這只不過是扔掉並引起了內存泄漏。 – BLUEPIXY
如果函數中的'code'被執行,則內存分配成功。 – BLUEPIXY
謝謝。這確實回答了我的問題。 – IntrepidBlue