char型のポインタを戻り値にした関数とメモリ開放について

解決


むむ  2007-07-06 22:23:08  No: 65587

ここに書込みをする内容ではなかったらごめんなさい。
char型のポインタを戻り値にするような関数を作ろうと思っています。
そこで気になったのですが、例えば

int main()
{
   char a[256];
   
   scrncpy(a, func(), sizeof(a) - 1);
   printf("結果:%s", a);

   return 1;
}

char *func()
{
   char *b;

   *b = new char[128];
   strcpy(b, "適当な文字列");

   return b;
}

こんなソースが有った場合、func関数内のbはdeleteできませんよね?
こういう場合、メモリの開放はどうやって行えばよいのでしょうか?
そもそも、こういった関数自体、作らない方がよいのでしょうか?
(例えば戻り値にするつもりの文字列のポインタをグローバル変数で宣言し
て、使い終わったら開放、という形にするなど)。

やりたいことは、ある関数の中で、引数の文字列を操作し、その結果を取得し
たいのです。
この結果の文字列の長さは引数の文字列の長さなどによっていくつになるかわ
からないため、この関数の中でポインタを宣言してnewで領域を確保している
のですが・・・

VC++というよりも、C言語の質問になってしまっていますが、よろしければご
教授板だけないでしょうか?

よろしくおねがいいたします。


あうん  2007-07-07 00:11:29  No: 65588

・戻り値を保存しておき、呼び出し側で解放するようにする
・呼び出し側で結果を受け取るバッファを用意し、引数に渡すような仕組みにする。
・戻り値をstd::stringにする

C++なら一番下が楽で解放忘れの心配もありません。


むむ  2007-07-07 01:49:48  No: 65589

あうんさん、ありがとうございます。

やはりあのままだと開放されないのですね。
教えていただいた方法で試してみます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加