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


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

【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 131



1 名前:デフォルトの名無しさん [2007/02/01(木) 23:08:46 ]
このスレは標準Cのみの限定スレです。
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。

C FAQ 日本語訳
www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
www.amazon.co.jp/exec/obidos/ASIN/4320026926/250-7563469-9920244

他の過去ログはここに
nssearch.hp.infoseek.co.jp/clang/
前スレ
【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 130
pc10.2ch.net/test/read.cgi/tech/1159613789/


GUIなどの標準Cではできない事の質問,ソース丸投げ、宿題、書籍 は
専門の別スレッド↓があるのでそこへさようなら。

【初心者歓迎】C/C++室 Ver.34【環境依存OK】
pc10.2ch.net/test/read.cgi/tech/1169039760/
C/C++の宿題を片付けます 82代目
pc10.2ch.net/test/read.cgi/tech/1169575464/

267 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 03:36:11 ]
>>266
なんでここで全然関係のないstdc++が出てくるのかわからんがな。

規格においてqsortは安定でないことになっているから、
本来は3値も要らず、2値で十分てことだろ。

268 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 03:46:23 ]
>>267
実際には順序付け集合に対する2値の述語関数があれば、
3値と同等のことは実現できる。だから、仮に3値が必要な場合であっても
2値の述語関数で十分なの。
>>236を読めよ。


269 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 03:59:52 ]
結論:
比較関数をいっぱい呼びたい奴はC++を使っとけ

270 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 05:38:34 ]
>>268
まったくだ。ifとwhileだけで構造化は実現できるのにforなんて無駄きわまりないな。
breakやcontinueなんてもっての他だ。gotoやlongjmpに至っては(ry

271 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 05:47:10 ]
>>270
意味不明。馬鹿じゃないの。
構造化のための構文は*ユーザにとって*便利であり
*ユーザが*見通しの良いプログラムを書くのに役に立つ。

2値の述語関数で十分なのに3値の述語関数を要求するのは
*ユーザにとって*便利でも何でもないし、
それによって効率があがりもしない。

結局3値の比較が*実際に*必要である箇所では、比較が2度必要になるからだ。
しかし、3値の比較を*常に*ユーザ側に求めた場合、実際には必要でない
箇所でも2度の比較を行う羽目になる。

つまり、不便なだけでなく、効率が悪くなるのだ。

それはライブラリ側の怠慢であり手抜きであり仕様の欠陥でしかないよ。

272 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 05:47:59 ]
>>270
まったくだ。lambdaさえあれば他になにも(ry

273 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 05:56:40 ]
>>269
アホか。C++のほうがはるかにソートを楽に記述できる。

274 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 06:00:15 ]
順序集合をソートする場合において、等値かどうかの比較が常に必要とは
限らないんだが、
わざわざそれを常にユーザに強いているのがCのqsort()の仕様。

C++のstd::sort()の場合は、そんな馬鹿なまねはしない。必要な場合は、
そして必要な場合のみに限って、2値のPredicateだけで等値かどうかの
判定をできるからだ。

275 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 06:59:21 ]
そして、2値を返すなら、compの素直な実装方法による
オーバーフローがどうこうという面倒な話も発生しない。



276 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 07:34:36 ]
Perlにはsortのために(としか思えない)わざわざ3値比較のための
演算子なんてものが用意されてるよね。
<=> とか cmp とか。これは笑ってしまう。

277 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 08:02:25 ]
それはここでやる話じゃないだろ。

278 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 09:12:15 ]
ここまで読んだ

とりあえず論点が完全にズレたまま進行してることはわかった

279 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 20:42:33 ]
いつまでソートの話してんだよ。

280 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 21:31:47 ]
例えば以下のような構造体をファイルで宣言した時
初期値として、
hoge.bar == NULL と hoge.foo == NULL は保証されているのでしょうか?


struct {
  char *bar;
  char **foo;
} hoge;


281 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 21:33:29 ]
されるわけないでござる

282 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 21:40:01 ]
え?その定義ならされるだろ。
まさかあれか、全ビット0がNULLとは限らないというあの流派か。

283 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 21:43:23 ]
自動変数でも?

284 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 21:56:14 ]
大域変数か静的変数なら初期化される。
ゼロフィルではなく、全てのメンバが0に。

285 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:01:03 ]
ファイルで宣言ってのは、自動変数説を否定している、と俺は見たが。
関数で宣言、なら自動変数かもね。 深読みしすぎといわれればその通り。



286 名前:デフォルトの名無しさん [2007/03/14(水) 22:06:00 ]
C言語初心者です。
「C言語プログラミング能力認定試験」って取るメリットありますか?

287 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:09:52 ]
スレ違いだよ

1級ならまだ許せるけど、履歴書に2級とか書かれたら(´,_ゝ`)プッ

288 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:16:35 ]
私はまだ何も分からないのですが
プログラミングをするにあたってまず何をそろえて何をすればいいんでしょうか?

289 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:19:21 ]
>>288
MSのサイトからコンパイラをダウソ。

290 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:21:24 ]
まずはパソコンを買うことから始めます。

291 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:24:13 ]
>>288
ボーランドコンパイラかVisual C++ Express。どっちも無料
インストール後、適当にPATH通せ

292 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:29:36 ]
Knoppixをお勧めしてみるテスト

293 名前:288 mailto:sage [2007/03/14(水) 22:49:47 ]
Visual C++ Expressのダウンロード及びセットアップ完了しました。

294 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 23:22:34 ]
>>280
「ファイルで」というのが「関数の外で」宣言されたという意味なら、される。
この初期化は、配列でも構造体でも、全ての要素について「=0」と書いたかのように行われる。
よって不動小数点数は0.0に、ポインタはヌルポインタに正しく初期化される。

>>293
入門書を買って言語仕様を覚えろ。

295 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 23:27:15 ]
関数内でもstatic付けた静的変数ならやっぱり0初期化される



296 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 00:19:35 ]
>よって不動小数点数は0.0に、ポインタはヌルポインタに正しく初期化される。
大間違い。

297 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 00:39:01 ]
>>296
俺は294じゃないけど間違いというならその理由を示してよ。

K&R A8.7初期化 より引用
> 明示的に初期化されない静的オブジェクトは、それ(あるいはそのメンバー)に定数
> 0が代入されたかのように初期化される。明示的に初期化されない自動オブジェク
> トの初期値は、不定である。

298 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 00:52:49 ]
>>297
根拠を示さず「大間違い」とだけ言うのは小学生だってできる。
無視してかまわんだろう。

299 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 00:53:35 ]
>>297
知らんがたぶん、>>282 じゃないのかな

300 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 00:59:15 ]
>>299
違う。

301 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 01:00:15 ]
>>299
>>297が示している通り、プログラマーが =0 と書いたのと同じように初期化される。

302 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 01:01:03 ]
>>299
関係ないでしょ。だって
void *p = 0;
と書いてあるように初期化されるんでしょ。
これはpには全ビットが0の値が入るのではなくて、
NULLポインタが入るんだよ。

303 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 01:01:37 ]
段階を追って詳しい説明になっていくのにワラタw

304 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 01:02:24 ]
ゼロフィルで済む処理系ならBSSをロードする時に全部ゼロ埋めするだけだが、
それで済まない処理系で規格を満たすためには、初期化専用のコードを
コンパイラが吐き出して、スタートアップルーチンで呼ばれるようにする
んだろね。
なんかC++みたいだなw

305 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 01:06:45 ]
不動じゃなくて浮動だろと言うつっこみだったんだよ!たぶん



306 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 01:07:23 ]
>>302
それ実は俺もずっと気になってたんだけど
ポインタに0代入したらそれはNULLポインタと等価なの?

というか全ビット0がNULLとは限らない処理系ってあるの?

307 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 01:09:10 ]
>306
CFAQには、そういう処理系も実在すると書いてあったよ

308 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 01:11:14 ]
というか
ヌルポインタの内部表現が未既定なのも
ポインタがくるべき場所に整数定数0を書いたらヌルポインタに変換されるのも
規格がそう定めているからであって、そのような処理系が実在するからではない

309 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 01:15:45 ]
>>306
> ポインタに0代入したらそれはNULLポインタと等価なの?
Yes.
ポインタの文脈では0はいつでもnull pointer constantとして扱われる。

310 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 01:16:21 ]
ポインタに「値が0の整数定数式」を代入したり、(暗黙にでも)比較したりしたときは、
コンパイラが整数定数0を正しいヌルポインタの値に変換する。

値が0である整数変数を代入する場合はこれにあてはまらない。
あくまで定数だけである。

311 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 01:25:21 ]
>>305
なっとく。

312 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 01:27:00 ]
>>280が変数宣言を書けば、こんなにモメなかったろうにw

ぶっちゃけauto変数以外はリンカーがプログラムに引っ付けて実行形式で出力する。
実行するとローダーがフォーマットに従い元通りに展開してくれる
auto変数で使うスタック領域もローダーがフォーマットに従いサイズ分用意してくれるが、
0クリアする決まりが無いので未初期化として扱うのが決まりになってる。

ROMで実行されるプログラムでない限りは、こんな覚え方でいいような気がする。





313 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 01:29:48 ]
NULLの定義が
#define NULL 0
#define NULL ((void*)0)
以外の処理系って見たことある?
俺は無いけど。

314 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 01:32:02 ]
>>312
BSS(未初期化のstatic変数を格納する領域)も実行形式に
埋め込む処理系は少ないのでは。
スペースの無駄だからね。


315 名前:306 mailto:sage [2007/03/15(木) 01:37:05 ]
物凄い参考になった。皆thx



316 名前:313 mailto:sage [2007/03/15(木) 01:39:15 ]
ちなみに俺はC++の癖でCでもNULLと書かずに0と書いてしまう。

317 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 02:15:30 ]
>>313
最近のgccとかは __null とかになってなかった?

318 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 03:16:08 ]
そうだと困るハードがあるからNULLが0x00000000とは定めてないわけだよねぇ?

319 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 03:17:01 ]
>>316
構わないと思う。

320 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 03:27:38 ]
>>318
ハードにかかわらず、NULLを整数値として評価した場合は 0 として評価されるって規格で定められてたと思うけど。

321 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 03:43:29 ]
>>320
あ、いやNULLの番地がって意味で

322 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 05:00:16 ]
NULLを使わず0で初期化してる人がいるようだけど
俺したこと無い。

例えば
int *foo = 0;
とか

typedef struct{
int a;
char *p;
}hoge;

hoge *ho = 0;
とかしちゃったりするの?


323 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 05:01:38 ]
>>322 もちろん。

324 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 05:06:01 ]
標準ライブラリに含まれてる型名って、ファイルスコープの名前だから
関数ローカルや構造体メンバでその名前使っても問題ないよね?

jmp_buf とか va_list とか、マイナーなやつをうっかり使ってしまうことが
無いとは言えないんで、エディタのキーワードハイライトに全部
突っ込んでおこうかと思ったんだけど、よくよく考えたら
ファイルスコープでやらかさなけりゃ全然問題ないんじゃないかと。

325 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 08:35:49 ]
>>313
DOSでラージメモリモデルの環境では0Lになっていると思う。
少なくともLSI C-86のヘッダではそうだった。



326 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 08:38:48 ]
>>324
いや、それらはグローバルなので問題ありまくり。
衝突を避けたければ、ユーザコードの名前に特定のPrefixを付けるといった
規約を考えたほうがよい。

327 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 09:54:39 ]
>>326
jmp_buf なんて何の規則も無い名前との衝突を避けようと思ったら、
関数ローカルや構造体メンバに int a; とすら書けないと思うんだが、
正気か?

328 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 10:22:35 ]
>>327
は?
構造体タグ名、変数名、メンバー名は別の名前空間に属するから、
そのような例で同一の名前を用いても問題が生じるわけがないよ。

329 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 10:22:58 ]
>321
単に「NULL」という言葉を「ヌルポインタ」という意味で使うと誤解を招きかねないのでやめたほうがいい
マクロNULLとヌルポインタは別のものであるから、区別できるように書くべき

330 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 10:27:24 ]
>>328
元の質問 >324 がそう言って「問題ないよね?」って聞いたのに対して
>326 が「問題ありまくり」と返しているんだが。

331 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 10:30:11 ]
>>330
同一の名前空間で同じ名前を重複させたら当然問題あるでしょ。
あなたがC言語の仕様に対する無知によって、的外れな例を挙げただけ。


332 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 10:40:58 ]
>>331
構造体メンバは問題が生じるわけないってことか?
なら残りはローカル変数ってことでいいかい?

ファイルスコープの typedef である jmp_buf の名前空間は
ローカル変数といっしょで変数名だよね?
でもローカル変数ならスコープが重なるだけなんで、ライブラリの
jmp_buf を使うつもりじゃなくてうっかり(知らずに)ローカル変数名として
使っただけなら問題ないんじゃないの?
どうせ内側で宣言されたローカル変数しか参照しないんだから。

333 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 10:43:47 ]
>>332
ヒント: 他人にものを聞く態度

>>336を読まなかったのかい?
jmp_bufは「ファイルスコープ」の名前ではありません。

334 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 10:52:50 ]
typedef名と変数名の名前空間も別物です。

だから、
typedef int i;
i i;
のようなコードも合法。良いスタイルではないけどね。

335 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 11:11:43 ]
>>333
「ファイルスコープ」じゃなくて「グローバルスコープ」って言いたいの?

ISO C99 の最新ドラフトを見てしゃべってるんだが、規格には
「グローバル」なんてスコープは無いよ。
6.2.1 で列挙されてるのは "file scope", "block scope",
"function prototype scope" の3種類だけ。 "global scope" で
検索してもひとつもヒットしない。なので >326 の言ってる
「グローバル」ってのはファイルスコープのことだと思った。



336 名前:333 mailto:sage [2007/03/15(木) 11:14:40 ]
>>335
あーごめん。嘘ついたかも。

リンケージまで考えるとファイルスコープって一般にstaticなオブジェクトのこと
を指すと思うんだけど、今は名前の話だったな。ごっちゃになってたわ。

337 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 11:16:45 ]
「C99 の最新ドラフト」はおかしいな。

>>334
で、同じく ISO C の最新ドラフトから、 6.2.3 に列挙されてる
名前空間は、ラベル名、タグ名、メンバ名、その他の4つ。
変数名も typedef 名も最後のその他で同じ名前空間です。

どんなコンパイラがそのコードを受け付けてくれるの?
手元の gcc ではやっぱりエラーになるよ。
:2: error: 'i' redeclared as different kind of symbol
:1: error: previous declaration of 'i' was here

338 名前:334 mailto:sage [2007/03/15(木) 11:20:54 ]
あー名前空間同じだけど、typedef定義と変数宣言を
スコープ違う形で試したから受け入れられたっぽいな。
こっちもすまん。

339 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 11:22:19 ]
>>329
確かに。お粗末でした。

340 名前:324 mailto:sage [2007/03/15(木) 11:57:28 ]
えーと。つまり >324 はやっぱり問題ないってことでおk?

341 名前:デフォルトの名無しさん mailto:sage [2007/03/23(金) 00:03:57 ]
>>337

struct a {
  int a;
};
typedef struct a a;
 
a b:
void c()
{
  b.a = 0;
  goto a;
a: ;
}

ってこと?

342 名前:デフォルトの名無しさん mailto:sage [2007/03/23(金) 01:52:18 ]
>>341
何がしたいのかわからん。

343 名前:341 mailto:sage [2007/03/23(金) 09:26:10 ]
処理自体には意味ない。
ただ名前空間の分類としては、こういうことかな?と
aは全部違う名前空間ということで。

344 名前:デフォルトの名無しさん mailto:sage [2007/03/23(金) 10:34:48 ]
>>343
そうだよ。ちゃんとコンパイルできただろ?

345 名前:デフォルトの名無しさん [2007/03/30(金) 01:20:19 ]
↓のようなことって技術的に可能ですか?
何分↓スレに専門知識を持った人間がおらず、真偽が分からなかったので
ここで質問させていただきました

558 名前: 麒麟です ◆qJFjoQ6aTk 投稿日: 2007/03/29(木) 22:06:29 ID:ENSP49sq
そうだ
一応書いておくわ

CとかJavaとか言語でわけてる現状がそもそもおかしいから

ソースコード翻訳機作ってやってるよ
おまえも参加しろwww

役に立たない下っ端を使えるようにする秘策だぞwwww

561 名前: 麒麟です ◆qJFjoQ6aTk 投稿日: 2007/03/29(木) 22:12:11 ID:ENSP49sq
意味分からないのか??

コンパイラじゃなく
ソースコードをそれぞれに変換するってことだぞ

意味分からないかな??

564 名前: 麒麟です ◆qJFjoQ6aTk 投稿日: 2007/03/29(木) 22:14:33 ID:ENSP49sq
たとえば
Cで書いたコード100万行を
自動変換で
Javaコードに変換するって奴だwwwwww

分かるかな???

ttp://human6.2ch.net/test/read.cgi/dame/1174933496/l50



346 名前:デフォルトの名無しさん mailto:sage [2007/03/30(金) 01:27:44 ]
>>345
マルチ氏ね!

347 名前:デフォルトの名無しさん mailto:sage [2007/03/30(金) 02:31:56 ]
はいはいわろすわろす

348 名前:デフォルトの名無しさん [2007/04/09(月) 14:46:42 ]
ファイルの作成された日時をゲットする方法を教えてくれい!

349 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 14:50:36 ]
アイコンを右クリックしてプロパティを見る。

350 名前:デフォルトの名無しさん [2007/04/09(月) 14:56:45 ]
>349
そんなアホナ。。。

351 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 15:00:27 ]
ワロタ

stat とか fstat で

352 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 15:11:31 ]
環境依存

353 名前:デフォルトの名無しさん [2007/04/10(火) 12:13:30 ]
program.exe arg1 arg2 arg3 ....

と何個でも、何文字でも無制限にいけるのか?

354 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 12:27:41 ]
引数の長さには通常制限があるが、環境依存。
ARG_MAXでぐぐれ。

355 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 12:39:20 ]
制限はあるけどそれはプログラムの方の制限じゃないよ



356 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 20:30:12 ]
ARG_MAXはPOSIXだと思う

357 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 00:27:46 ]
うん

358 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 00:30:27 ]
シェルの制限かと思ってた

359 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 22:37:03 ]
>>349
できました! ありがとうございます!

360 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 01:54:24 ]
>359
mjky

361 名前:デフォルトの名無しさん [2007/04/13(金) 15:40:58 ]
malloc とか free に一枚皮を被せるって常識なの?

void Free(void *ptr)
{
  if (ptr != NULL) free(ptr);
}
こんなようなの、、、


362 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 15:50:03 ]
少なくとも、free() にNULL渡すのは問題ない仕様だから
それは意味無いな。

363 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 15:50:40 ]
違った delete に渡すのが問題無いんだった

364 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 15:51:15 ]
>>361
常識ではないし、標準Cなら
| free 関数は、ptr が指す領域を開放し、その後の割付けに使用できるようにする。
| ptr が空ポインタの場合、何もしない。
ので、まったくの無駄。

もっとも、malloc/free のトレースをしたいという目的で
ラップするのはアリ。

365 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 16:46:05 ]
メモリリーク検出には役立つかも知れない



366 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 23:45:45 ]
>>361
ペアであるmalloc/freeのインターフェイスをよりペアらしくできるから、
オレはこんな感じにすることがある。

result_type my_malloc(void **ptr, int size)
{
  *ptr = malloc(size);
  return (NULL != *ptr) ? result_success: result_faild;
}

result_type my_free(void **ptr)
{
  if (NULL == *ptr)
  {
    free(*ptr);
    *ptr = NULL;
  }
  return result_success;
}

367 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 00:02:53 ]
void**はないだろ、常識的に考えて…






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

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

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