【cocos2d-x】vectorの落とし穴

c++におけるvectorクラスは複数の要素を管理するコンテナの意で多用すると思いますが、コンパイラが教えてくれない落とし穴があったので紹介したいと思います。

要素数を超えた参照

// 要素数1のvectorを用意
vector<int> v(1);

// 10番目の値を取り出す
CCLOG("%d", v[10]);

JavaやObjective-cであればIndexOutOfBoundsExceptionとかでエラーを吐いてクラッシュしますがc++ではクラッシュしません。
クラッシュはしないですが、vインスタンスの管理外のポインタを参照している事は明らかですね。

上記の例で見ると単純に見えますが、クラッシュしてくれないので非常に気付きにくいバグと言えるでしょう。

誰かのお役に立てば。

このブログのcocos記事一覧

コメント

タイトルとURLをコピーしました