以下は3つの関数です。 main()は期待どおりに出力します。 mycharstack()の文字列はスタックに格納されているので、 "ch"が範囲外になると文字列を返すことはできません。どのように正しく動作しますか? mychar()に格納されている文字列もスタックにあると思います。それは正しく動作するはずですか? コードやメモリリークに他のエラーがあると思いますが、もしあれば教えてください。私はこれらのクリーナー& std :: stringで簡単に行うことができます。しかし、私はchar *で何が起こっているのか理解したい。戻り値char * from function
#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