ありがちなバグの原因いろいろ

ありがちなバグや原因のわかりにくいコンパイルエラーなどの例を書き溜める予定。。。

rubyでは、行の終わりの不要なコンマに注意。
foo = hoge,
baz(piyo)
foo = hogeのつもりだったのにfooには配列が入ることになる。


コンストラクタ以外でのコンテナ初期化

コンテナをメンバに持つクラスで、コンストラクタ以外でコンテナを初期化する場合。
class Foo {
public:
  void initialize();
    ...
  std::vector<Bar> a_vector_;
    ...
}
 
void Foo::initialize() {
  a_vector_.reserve( ... );
   ...
}
 

initialize()が複数回呼ばれると、そのコンテナの古い中身が捨てられずに残る。

対策

  • コンテナを初期化する前にclearする。
  • initialize()が複数回呼ばれるようなテストを行う。


間違ってnamespaceを入れ子にしてしまう。

namespace foo {
...
} // namespace foo
namespace std {
void swap(bar &a, bar &b) {...}
}
 
とするつもりで
namespace foo {
...
namespace std {
void swap(bar &a, bar &b) {...}
}
} // namespace foo
 
としてしまう。

このヘッダをインクルードしたソースにおいて、std::hogeはfoo:std::hogeと解釈されてしまうので、std名前空間をアクセスする部分でコンパイルエラーとなる。

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2012年01月22日 13:51
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。