奇妙なエラーが発生しました。MSVC 2005でCコードを実行中に奇妙なエラーが発生しました
すべてのCコードのMSVS2005にワークスペースがあります。私は1つのCファイルにグローバル変数を宣言しています(file1.c)。このファイルにはmain()という関数があり、その変数の値を初期化します。他のCファイル(file2.c)。 mainから、このグローバル変数の値を1に設定する関数(file2.cのfunc1)への関数呼び出しがあります.file2.cでは、グローバル変数を "extern .."と宣言してアクセスしました。しかし、私が気づいたのは、コード実行が関数func2を入力するメイン関数の瞬間に、グローバル変数のアドレス自体が完全に異なるアドレスに変更されていることがウォッチウィンドウに表示されていることです(ウォッチウィンドウで私は&変数を見ています) 。結果として、その変数の値が1に設定されると、値1を全く異なるメモリアドレス自体に書き込む。だから、後でこの変数を使ってif条件(変数== 1の場合)をチェックすると、それは0の値を示し、if条件を満たしておらず、そのコードパスを取っていないそのパス。
回避方法: 私はその変数を私の既存のグローバル構造の1つに宣言し、同じ操作を行うためにこの変数にアクセスしました。コードは期待どおりに動作します。
グローバル変数のアドレスがCファイルでグローバルとして宣言されている場合、そのグローバル変数のアドレスが変更される原因となるエラーの説明は何ですか?どの* .cファイルを宣言しても、 "extern"を使ってどのファイルにアクセスするかは関係ありません。結果は同じグローバル変数アドレス変更とそれに続く誤動作です。最適化オプションは有効になっていません。
おかげで、
〜AD
些細なエラーがあります。いくつかのコードスニペットを巻いてください。 – sharptooth
コードを記述するのではなく、重要な部分を直接ここに挿入すると、あなたの質問がはるかに読みやすくなります。 – schnaader