変数の中身がおかしい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ひよこ

変数の中身がおかしい

#1

投稿記事 by ひよこ » 15年前

いつもお世話になっています。
ちょっとしたソフトを作っているのですが
おかしな現象が起きています。
i=0;と代入したのにi=260;となってたり
i=sとしてiとsの値が違っていたりと何かが起きているのですが、
どうすればいいでしょうか?私自身もこういうことは初めてで困っています。
VC++2008EE Vistaです。よろしくお願いします。 

Poco

Re:変数の中身がおかしい

#2

投稿記事 by Poco » 15年前

一旦、「クリーン」を行ってリビルドしてみては?
それでダメな場合、*.pdbファイルを消去して、リビルドしてみてはどうでしょうか?

Justy

Re:変数の中身がおかしい

#3

投稿記事 by Justy » 15年前

 コンパイラの最適化はオフですか?

ひよこ

Re:変数の中身がおかしい

#4

投稿記事 by ひよこ » 15年前

ぽこさん、クリーンしてリビルドしてみましたが、できませんでした。
Justyさんコンパイラの最適化はオフですか?
>>プロジェクトのリンカの最適化はすべて既定値となっています。
一回再インストールしてみます。

メタ

Re:変数の中身がおかしい

#5

投稿記事 by メタ » 15年前

ひょっとしたらグローバル変数が・・・

Justy

Re:変数の中身がおかしい

#6

投稿記事 by Justy » 15年前

>リンカの最適化
 どの設定を見ていますか?
 コンパイラ(構成プロパティ → C/C++ → 最適化)の方です。
 判らなければ、今構成は Debug/Releaseどっちになっていますか?


>リビルドしてみましたが、できませんでした。
 リビルド出来なかった、ということですか?
 リビルドに失敗しているとなるとソースと実行ファイル・デバッグ情報に食い違いが発生している
可能性が高いです。

 再インストールの前に、VisualC++を一旦全て終了し、ビルドの成果物(設定が標準なら
Debug/Releaseフォルダ)や ncbファイルを消して、プロジェクトを立ち上げて再度試してみてください。

 ファイル・フォルダが消せないようであれば、OSを再起動してから試して下さい。

ひよこ

Re:変数の中身がおかしい

#7

投稿記事 by ひよこ » 15年前

メタさん、グローバル変数がどうしたのでしょうか・・・。
Justyさん
>>もう再インストールしてしまいました。
>>けれど、今でもおかしな値になります。
リビルドしてみましたが、できませんでした。
>>すみません、言葉が足りませんでした。リビルドしてからもおかしな値が出たということです。
最適化は無効となっています。

今、これはと思うことがありました。
for(int i=0;i<MAX_PATH;i++)
fileName=num;
問題のソースの前にこういう文があって問題の変数iの定義へ移動をしたら上のfor文のiを指したということは
原因かもしれないと思ったのですが、これが原因の場合どうすればいいでしょうか?

ひよこ

Re:変数の中身がおかしい

#8

投稿記事 by ひよこ » 15年前

今変数名を変えて試してみましたら、代入できました。
これはコンパイラのせいなのでしょうか?

Justy

Re:変数の中身がおかしい

#9

投稿記事 by Justy » 15年前

>今変数名を変えて試してみましたら、代入できました。
 多分ウインドウ上の値がおかしかっただけで、元々できていたと思いますよ。
 基本的にデバッガの値は「デバッガが認識している値」を表示しているだけで、
本当にその変数にその値が入っているかどうかまた別の話ですから。


>これはコンパイラのせいなのでしょうか?
 どちらかというとコーディングスタイルとデバッガの見方に問題があります。
 for文の中と外で同じ変数名(しかも短い)を宣言するというスタイルは言語的には問題ないですが、
お行儀がいいとはちょっと言えません。
 for文の中は iでいいとしても、外の方は何か適切な名前をつけた方がいいですね。

 次に見ているウインドウは多分「自動変数」ウインドウだと思いますが、
こちらは同じ関数内に同じ変数名が複数あるとウインドウ内の変数名の参照先がプログラムの実行に合わせて
変化してしまいます。

 そういう場合は「ローカル」ウインドウの方で確認して見て下さい。
 こちらを使うと、関数内で使われている全てのローカル変数がリストアップされます。 画像

ひよこ

Re:変数の中身がおかしい

#10

投稿記事 by ひよこ » 15年前

コーディングスタイルとデバッガの見方に問題があったのですか。
for文で使い回しをしようと思ったらこのようなコーディングになってしまいました。
これからは気をつけようと思います。
ローカルのウィンドウで確認してみましたがちゃんとi=0がありました。
皆様のおかげで解決できました。
ぽこさん、Justyさん、メタさんありがとうございました。

softya

Re:変数の中身がおかしい

#11

投稿記事 by softya » 15年前

一言付け加えるならリリースビルドでデバッグすると変数はまともな値を示しませので必ずデバッグビルドでデバッグしてください。リリスービルドの最適化されたものの動作がデバッガで追跡し切れないために起こる現象です。

ひよこ

Re:変数の中身がおかしい

#12

投稿記事 by ひよこ » 15年前

softyaさん補足ありがとうございます。
つまり、リリースビルドではデバッグをしないほうがいいということですね。
今回、変数が代入できない現象はデバッグビルドで起きました。
デバッガの使い方が悪かったのが原因でした。

たいちう

Re:変数の中身がおかしい

#13

投稿記事 by たいちう » 15年前

> つまり、リリースビルドではデバッグをしないほうがいいということですね。

デバッグ用のビルドとリリース用のビルドですので、当然そうなります。

しかし、リリース用のビルドの時にしか発生しないバグもありますので、
その場合は何らかの方法でリリースビルドでビルドした
プログラムをデバッグする必要があります。
デバッグビルドで発生するバグを全てつぶしてからの話ですけど。

ひよこ

Re:変数の中身がおかしい

#14

投稿記事 by ひよこ » 15年前

たいちうさん補足ありがとうございます。
リリースビルドのバグですか。
今回はデバッグビルドでデバッガの見方の間違いのせいでまだ良かったです。

閉鎖

“C言語何でも質問掲示板” へ戻る