VC++2010でプログラムしていますが、下記変数TESTの内容がプログラム実行中にある時点で勝手に変更されてしまいます。もちろんプログラム中に変数TESTを変更する記述は何処にも書いていません。
64bit環境での変数設定の注意点を教えてください。
long TEST=0;
long TEST1;
char LOOP=1;
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
while(LOOP)
{
if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
{
TranslateMessage( &msg );//翻訳する
DispatchMessage( &msg );//急送する
}
TEST1 = 7777777;
if(TEST)Beep(3000,100);
}//while(LOOP)
return msg.wParam;
}//WinMain
No.6ベストアンサー
- 回答日時:
>コンパイラによりバグをはじき出す基準が変わるのでしょうか?バグが潜んでいるのならNO3の方の回答が考えられそうですが、この場合アクセス違反でも起きない限り発見も難しいと考えます。
その難しいことが起きるから発見されないんですけどね。
世の中の製品のゲームやアプリでも偶然動いていることは良く有ります。
コンパイラが変わるとコンパイラの最適化アルゴリズムが変わるので変数のメモリの配置やコンパイル後の機械語命令コードの並びそのものが完全に変わるのはよく有る出来事です。そのため前のコンパイラでは問題なかったプログラムがいきなりバグだらけのプログラムに変わることがあります。
>ついでに教えて頂きたいのですが、ちなみにバグの潜んだVC++6でビルドした実行ファイルは開発環境では完動しても、他のマシンで不具合が起きる事もあるのでしょうか?教えてください。
Releaseビルドした上で開発マシンでバグが出なかった場合は、操作方法や稼働負荷で出るバグでない限りバグが表面化する可能性は限りなく低いと思います。
つまり、他のPCやバージョンの違うOSで動く可能性はかなり高いです。と言ってもOSがWin98からWinXPに変わったときにバグが表面化したソフトも実際にかなり有りましたけどね。
No.5
- 回答日時:
それはバグが表面化しただけでバグが潜んでいた可能性が高いです。
コンパイラが変わったので問題が表面化しています。つまりバグを直さないと動きません。x86とかx64とか無関係です。バグを直したくないというなら、素直にVC++6でコンパイルした実行ファイルのまま使ったほうが良いでしょう。
この回答への補足
zwiさん、度々ありがとうございます。
コンパイラによりバグをはじき出す基準が変わるのでしょうか?バグが潜んでいるのならNO3の方の回答が考えられそうですが、この場合アクセス違反でも起きない限り発見も難しいと考えます。
やはり、原点に返って変数(配列)領域のアクセスを洗ってみます。
ついでに教えて頂きたいのですが、ちなみにバグの潜んだVC++6でビルドした実行ファイルは開発環境では完動しても、他のマシンで不具合が起きる事もあるのでしょうか?教えてください。
No.4
- 回答日時:
配列の添字間違いか、ポインタ操作のミスなど考えられる原因は沢山あります。
64bitか32bitかとか全く無関係でしょうね。
デバッガのデータ変更ブレークの方法を理解したほうが懸命です。
この回答への補足
毎回ありがとうございます。
実は最初に大事な事を書くのを忘れていました。
VC++6でプログラムしたソースをVC++2010(Win7,64bit)にそのまま移行しました。
移行後にソースは絶対に変更していません。
VC++6時代ではエラーなく実行されていたのですが、64bit環境になってからのエラーになります。
今回の事態になってからプログラムをやり直す考えは全くありません。
2010の64bitコンパイラで完全な32bit環境でコンパイルできる設定が知りたいのです、コンパイルオプションやリンカーオプションの設定を教えてください。
よろしくお願いします。
No.3
- 回答日時:
提示されているコード中で怪しい部分は特になさそうです。
VCを使っているのであれば、TESTにデータブレークポイントを設定してどこで値が変化しているのか確認するのが良いのではないでしょうか。
ちなみに良くあるミスとしては
int a[2] = {0,0};
int b = 0;
a[2] = 123; // これでbの値が変わることがある
のように、変数の範囲外アクセスが原因で他の変数の値が変わってしまうことがあります。
あと、
>64bit環境での変数設定の注意点を教えてください。
これの意味が良く分からないのですが、これは32ビットでビルドすると問題ないということでしょうか?
この回答への補足
qwertfkさん
回答ありがとうございます、実は最初に書き忘れていたのですが、VC++6のソースをそのままVC++2010に移行しただけです。
もちろん、VC++6では問題なく動作していました。
よろしくお願いします。
No.2
- 回答日時:
「プログラム実行中にある時点で勝手に変更されてしまいます」といっても, 当然「プログラムがそうなってるからそう動作する」だけだよね.
とりあえず「どこで『勝手に変更』されているのか」を調べたら?
この回答への補足
毎度、回答ありがとうございます。
質問のプログラムは実際のプログラムではありませんが、仮にこのようなプログラムがあったとしたら、ある時点で勝手にベープ音が鳴ると言う状況で、何処で鳴るかは現実問題として特定出来ない状況です。
実際に変数を変更するプログラムを書いていないに関わらず勝手に変更されてしまいます。
更に、付け加えさせて頂きますと、設定した配列変数の1番目の変数が実行中に何時までたってもゼロのままで変化しないため2番目の配列を使用すると変更されていることが確認されました。
まるで、狐に包まれたような変な状況です。
ただ、プログラムが膨大で全体を提示出来ないのが残念です。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- Excel(エクセル) Excel-VBAの「しばらくお待ちください」のダイアログが自動的に閉じない 2 2023/05/24 15:31
- Excel(エクセル) 複数のブックをひとつのブック(複数のシートにまとめる)場合にシートとの順番について 5 2022/12/28 20:47
- JavaScript javascriptで入力フォームが空欄の時にアラートによるエラーを出すコードを書いています。 2 2023/06/13 17:58
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- その他(プログラミング・Web制作) VScodeでpythonプログラムの関数を実行したい 2 2022/07/13 19:24
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- JavaScript [再掲]指定したパスが現URLに含まれていたら特定要素を削除するJavascriptのコードについて 1 2023/05/10 15:09
- Visual Basic(VBA) エクセルVBAで教えて頂きたいのですが? 2 2022/12/31 20:28
このQ&Aを見た人はこんなQ&Aも見ています
-
【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
【お題】 ・存在しそうで存在しないモノマネ芸人の名前を教えてください
-
一回も披露したことのない豆知識
あなたの「一回も披露したことのない豆知識」を教えてください。 「そうなんだね」と「確かに披露する場所ないね」で評価します。
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
あなたは何にトキメキますか?
「きゅんとした〜♪」 と思う瞬間ってありますよね。 それは恋愛だったり、推し活だったり、映画のワンシーンだったり……。
-
タイムマシーンがあったら、過去と未来どちらに行く?
20XX年、ついにタイムマシーンが開発されました。 あなたは過去に行く? それとも未来? タイムマシーンにのって、どこに行って、何をしたいか教えてください!
-
変数の値が勝手に変化する原因
C言語・C++・C#
-
値が変わるのはどうしてでしょうか?
C言語・C++・C#
-
C言語初心者の質問失礼します。
C言語・C++・C#
-
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・ハマっている「お菓子」を教えて!
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
unsigned long long 型のフォー...
-
ソフトの開発言語を調べる方法
-
C++Builder → Visual C++ 移植...
-
24bit サイズの変数
-
配列の初期化子 { .......} ...
-
組み込みソフト。ROM領域にデータ
-
CISCとRISCの移植性について
-
中国語(簡体字)をソースコード...
-
C言語でチェスを作ってみたいと...
-
COBOLの論理演算子について質問...
-
for文内での変数定義
-
C++でデスクトップGUIアプリ開...
-
C++DLLの明示的リンクに関して
-
組込みC開発
-
.EXEから製作者を特定すること...
-
sprintfの書式について
-
DLLの呼び出され方が分かりません
-
各言語の違いのついて
-
”カラー表示プログラム”のソー...
-
C言語はC言語でできている?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
unsigned long long 型のフォー...
-
ソフトの開発言語を調べる方法
-
printfなど、標準関数のソース...
-
組み込みソフト。ROM領域にデータ
-
C++Builder → Visual C++ 移植...
-
cc と gcc の違い
-
パーサとコンパイラの違いって?
-
COBOLの論理演算子について質問...
-
C++でデスクトップGUIアプリ開...
-
リリースモードとデバッグモー...
-
COBOLのALPHABET...
-
bcpadのコンパイラのインストー...
-
C言語はC言語でできている?
-
VC++の/Zm オプションについて
-
エラー0でのビルド失敗について
-
long long型について
-
main() 関数は、int を返値とす...
-
COBOL計算式の中間ワーク桁数に...
-
C言語の規格
-
変数の内容がコロコロ変わる、...
おすすめ情報