[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 06/24 02:11 / Filesize : 245 KB / Number-of Response : 928
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け(入門編)Part 63



392 名前:351 mailto:sage [2010/04/24(土) 16:38:53 ]
>>391
> strdup()のデメリットがfree()を必要とすることでは無い
> オブジェクトを生成したら破棄するのは当然のことである(create/destroyの対が大切)

確かに当然のことです。当然のことですので、その当然のことを忘れた場合、深刻なバグになるという大きなデメリットがあります。

> my_strdup()のメリットが自動変数を引数に渡せるとかなんとか言っているが
> 自動変数の領域が足りない場合や書き換えが必要な場合、結局メモリ確保が必要となり自動変数が渡せることはデメリットでしかない

自動変数で問題がいない場面では、上記の深刻なバグを避けられるという点で十分メリットがあります。
仰りたいことはわかりますが、一概に決められるものではないと思います。

例えば、>>391の主張では、memcpyはデメリットしか無いことになってしまいますよね?

> 呼出元が生成と破棄を対にして行うのが良い

良いのはわかります。つまり、それがstrdupや、>>351の(1)の場合ですよね。
my_strdupにmallocで確保したメモリー領域を与え、使用後freeするのも良いと思います。

ですが、my_strdupに自動変数を渡してはいけないということにはならないですよね?下記のようなコードは普通に書かれると思います。

void func(const char* str) //strは99文字以下の文字列
{
 char buf[100];
 strncpy(buf, str, sizeof(buf));
 /*strに対する処理*/
 printf("%s\n", str);
}

これは、若干恣意的な例ですが、これに限らず、自動変数の構造体や配列へのポインターを関数に渡すことは一般的に行われることですよね。






[ 続きを読む ] / [ 携帯版 ]

全部読む 前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<245KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef