このページに関してのお問い合わせはこちら
C++相談室 part89
ツイート
827
:
811 ◆QZaw55cn4c
:
2011/07/04(月) 04:50:39.35
>>814
評価版(
https://downloads.embarcadero.com/free/c_builder
)をインストールしました。これに付属する bcc32 のバージョンは 6.31 でした。
これを使用して、以下のソースについて、codeguard のチェック能力を調べました。
http://codepad.org/kq7NFnkJ
(1)グローバルなnew/deleteをオーバーロードする。
(2)適切でないdelete(new[] したものを delete [] せず、delete する)。
(3)仮想デストラクタを定義していない。
以上は133行目〜135行目に #define で記述しています。
それぞれの .cgl ファイルは以下のとおりでした。
アドバイスをいただいた上で到達した最終形
http://codepad.org/oOn0xNo5
問題ありません。
(1)
http://codepad.org/3GQQotKu
グローバルな new/delete のオーバーロードでは、codeguard は誤動作しました。
(2)
http://codepad.org/RlqV8ugy
きちんと検出しており、検出内容を示すコメントも適切でした。
(3)
http://codepad.org/ZcKLtP1e
きちんと検出しており、検出内容を示すコメントも適切でした。
>>814
>しかし今は問題がない
残念ながら上記のとおり問題はありますね。ただしグローバルに new / delete すると、gcc ではコンパイルすらできない※ので、別の意味で推奨されないこと、とも考えられ、codeguard が通らなくてもしかたがないかもしれません。
※
http://codepad.org/pVU3fnX4
declaration of 'void* operator new(size_t)' throws different exceptions
(これはどういう意味でしょうか?)
>>728
残念ながら再現できませんでした。codeguard の dll 内で例外が発生したのでは、こちらとしてもどうしようもない。
役立つツールを紹介していただきありがとうございました。