重要なことは、コメントやその他の回答で指摘されていることは、メモリがリークしていることです。
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