スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

バッファオーバーフローは怖い!

動的メモリを多用するようになって
バッファオーバーフローを起こすことが多くなった。

今までは文字列コピーなんかはlstrcpy()でやってた。
しかし、これはいけない。

_tcscpy_s()でなくてはならない。

セキュリティ強化版の関数は前々からその存在は知っていたが
あまり気にしなかったのがいけなかった。
これからはセキュリティ強化版を積極的に活用しよう。

ついでに言うと
ポインタに対してsizeof演算子を使用して
バッファのサイズを取得した気でいたという。
無論返ってくる値は32bitか64bitなんだ……
うん。これで一日潰したこともあったな。
解決策を求めネットを徘徊して、同じことをした人が居なければ
未だにデバックしてたかもしれない…

それにしてもC言語は文字列関連が弱くていけない。
ファイルパスの解析とか、ヘッダー解析とか苦労する。
さらに言うならば、ユニコードとアスキーの混在も面倒だ。
関数の使い分けが必要だったりするし
ユニコード非対応なら、いちいちアスキーに変換して出力をユニコードに戻したりと
ソースが糞汚く冗長になる。
作った本人ですら読むのが億劫になるのに、他人が読むなら全く読む気がしないだろう。

しかし、この実行速度の速さには驚く。
VBで拡張子からファイルの種類を列挙するプログラムを見たし実行してみたけど
一瞬もたつく上にソースが見づらい。
行指向の概念が未だに根強く残っている弊害なんだろうけど…

そのプログラムをCで書き起こして見た。
レジストリ操作のいい勉強になった。
VBと比べるとやはり速い速い。
しかし、文字列関連はVBに軍配があがるか。
C#やMFCなんかなら楽になるんだろうけど
それじゃ、ただ出来上がった部品を組むだけの簡素なプログラミングになってしまう。
やはりシステムコールを使用してプログラミングする方が楽しいだろう。

プログラミングのバイトないかな……マジで。
大学生にC言語を教えるバイトとかないの?
最悪大学生のC言語の課題を代行するのでもいい!

なんか愚痴だらけの記事になった。
久しぶりの記事なのにこれでいいのか?(いい訳ねーよ!

追記

そいや、正二十角形の描画処理の説明してないや

色々書きたいこと有るんだけど
なかなか時間が…

時間はある!

けど、ね…

他にちょっと便利な自作関数とかも公開しますね。
おもにDATA Linkで使用予定の関数たちです。

10個くらいあるかな。

IPv4がグローバルなのかプライベートなのかループバックなのかリンクローカルなのか判断する関数

拡張子から、レジストリを参照してファイルの種類を出力する関数

バイトから単位付(KBとかGB)に直す関数

MessageBoxの使い勝手向上バージョンandセキュリティ強化版関数

などなど色々作ってます。

DATA Linkと並行してファイル情報を表示するアプリも作成中。
なかなか使えるんじゃないかと思う。
簡易エクスプローラも作成するか?
なんか無駄な開発になりそうだな……やめておこう。
  1. 2010/09/10(金) 01:50:00|
  2. プログラミング
  3. | Track back:0
  4. | Comment:2

Comment

No.241

オーバーフローはこわいですねぇ。
ゲーム制作でもよくメモリに悩まされます。ちゃんと割り振りしないと直ぐに落ちますからね。メモリ設計図を書ける人がうらやましい……。
  1. 2010/09/13(月) 10:45:23 |
  2. URL |
  3. K・G #L1ch7n1I
  4. [ Edit]

No.240

俺はもうお手上げだw
  1. 2010/09/11(土) 14:18:19 |
  2. URL |
  3. VARREL #-
  4. [ Edit]

Post a comment

Only display to administrator.

Track back

Track Back URL
Track Back to this post(FC2 blog user)