カテゴリー別

お絵描き、デザイン

写真、動画関連ソフト

アメーバピグ専用ソフト

ホームページ関連

画像処理

スキャナー用

SEO 関連

お楽しみ

その他

過去ログ

2017年09月25日(月)

静的変数の初期化タイミング

今日は、ピグアイランドタイマー
Visual Studio 2015 でコンパイルできるように修正してました。

で、静的変数のリストに要素を追加して、
後で使おうとしたら、空っぽだったので、ビックリしました。

こういう場合、よくあるのは、
同じものに追加してるつもりが
別のものに追加している間違いです。

確認するには、追加してる場所と、
使おうとして空になっている場所の
双方でブレークして、変数のメモリーアドレスを
比較するのが速いです。

今回は変数名が g_soilItems なので、
&g_soilItems をウォッチすれば OK。

・・・

同じですね。

ということは、追加した後
どこかでクリアーしてしまってるのかな
と思って、g_soilItems で検索してみても
空にしてる個所はありませんでした。

あり???

あ、ひょっとして静的変数の初期化のタイミングかも。

で、リストに追加するコードの実行を
遅らせてみると、無事直りました。まじか。

今回のエラーが起き条件は以下の通り。

静的にリンクするライブラリーで、
静的なリスト変数を定義。

ライブラリーをリンクするアプリケーションプログラムでも
静的変数を用意して、その変数のクラスの
コンストラクターで、静的なリスト変数に項目を追加です。

この場合、静的なリスト変数が先に初期化されれば
問題無いはずなので、おそらく、項目に追加するための
クラス変数が初期化された後で、静的なリスト変数が
初期化されたんだと思います。

うーん。なんかしらのエラーが発生しないもんかのー。不思議。

まぁ、そんなわけで、静的なグローバル変数の
初期化タイミングには気をつけた方がいいですね。

ブログ著者のホームページはこちら です。


コメント
コメントする