お世話になります。
初心者です。
OS XP、VC++ 6.0で開発しています。
今、RS232C通信用ソフト(MFC)を作成したのですが、ビルドもNo ErrorでOKでXP上では動いているのですが、Windows 2000 Profetionalでそのソフトを使用して、RS232C通信をしながらマイコン開発用のコンパイラでマイコンソフトのDebugをしているのですが、時々下記のコメントが出て、作成したRS232C通信用ソフトが勝手に落ちます。
何が問題なのでしょうか。
お力を貸していただけませんでしょうか。
"0x77fcb491"の命令が"0x00000038"のメモリを参照しました。メモリが"write"になることはできませんでした。プログラムを終了するには[OK]をクリックしてください。
No.3ベストアンサー
- 回答日時:
>ClearCommError関数にて、16というエラー値を得ました。
ClearCommError関数でCE_BREAK(16)ということはハードウェアでブレーク信号を検出したことになります。ブレーク信号を検出すると該当する処理があれば対応させる必要がありますがXpのときに意識していないのであれば,単純に通信異常かもしれません。受信バッファをクリアするなどの処理が必要です。(通信ロジックが不明の為詳細にはわかりませんが・・・),いずれにせよClearCommError関数を再度コールしてエラーが無くなる状態まで面倒を見る必要があります。またブレーク信号検出時の処理があれば,そこに問題があるのかもしれません。
お世話になります。
なるほど!
ブレーク信号というのがあるんですね。
確かに、接続先の機器を落とすとソフトが落ちるので、その可能性が濃厚です。
CHECKしてみます。
ありがとうございました。
No.2
- 回答日時:
まあ、その通信プログラムのバグでしょう。
たまたまXPでは症状が出なかったにすぎないかと。VCのデバッガ上で通信プログラムを走らせるのが一番ですが、それが無理ならプログラムの各所でログを出力して、例外の発生個所を絞り込んでいくよりないでしょうね。
この回答への補足
お世話になります。
ご返答有難うございます。
確かにエラーが見つかりました。
ClearCommError関数にて、16というエラー値を得ました。
その後すぐにGetLastError関数にて拡張エラーを確認したところ、0が帰ってきました。
XPでVC++を使ってデバッグしてもこのエラーは出てこないのですが、2000 profetional上でデバックするとでてきます。
どこをどのように直せばいいのでしょうか。
ご教示いただければ幸いです。
No.1
- 回答日時:
>何が問題なのでしょうか。
関数の呼び出しでエラーが起きNULLが返されているのに、そのNULLを判定せずにスルー(無視)し、オブジェクトのポインタか構造体のポインタがNULLになっているにも関わらず、そのオブジェクトか構造体のメンバに値を設定しようとした。
オブジェクトか構造体のポインタがNULLのままだと、オブジェクトか構造体のアドレスは「0x00000000」になり、メンバのアドレスは「0x00000000+構造体内でのメンバの位置」となる。
値を設定しようとしたメンバの「構造体内でのメンバの位置」が「0x38」であれば、そのメンバのアドレスは「0x00000000+0x38」になり「0x00000038」になる。
良くあるのが
FILE *fp;
fp = fopen("C:\\Program Files\\hogehoge.dat","r");
fread(bu,1,100,fp); //fopenがNULLを返すと、freadの先で0x00000000番地付近にアクセスして強制終了する
などのように「絶対にオープン出来る筈だと思って、fopenがNULLを返した場合のエラー判定をしてない」と言うケース。
オープンしようとした場所が「システムフォルダ」などの場合「OSのバージョンが違うと、セキュリティ設定が異なり、別OSでオープン出来てたのが、こっちのOSではファイルが存在しててもオープン出来ない」と言う事があります。
その為「絶対にオープン出来る筈のファイルがオープンできない」なんて事も起こるので「fopenがNULLを返した場合のエラー判定をしてない」のが原因で「0x00000000番地付近のメモリにアクセスして終了」と言う事が良くあります。
ほぼ間違い無く「エラー時にNULLを返す関数を呼んだ時に、エラーでNULLが返って来ているのを判定し忘れている部分がある」と思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 10 explorerをedgeで開く方法 2 2022/06/05 14:59
- ドライブ・ストレージ RS232C 通信でエラー(受信が正確でない)がでます。どなたか教えてくださいませ。 11 2022/09/03 11:53
- その他(OS) Calender.exeWin10 ノートPC デスクトップが開く前に特定のソフト画面が開く 2 2022/11/11 13:49
- YouTube 新しく買ったデスクトップPCを使用すると、今までのGoogleのアカウントが使えなくなった。 1 2023/01/07 00:41
- その他(プログラミング・Web制作) Pythonを用いたフラッシュ暗算ソフトの開発に必要なもの 2 2023/01/29 02:22
- CPU・メモリ・マザーボード Windows11アップデート後の不具合(メモリ不足)について 9 2023/01/04 11:34
- 画像編集・動画編集・音楽編集 動画編集の処理時間と編集後の動画容量について 2 2022/12/29 21:27
- Windows Me・NT・2000 widows xpのエラーで利用ができなくなりました 3 2022/12/21 13:43
- ホームページ作成・プログラミング 11以降のホームページ作成ソフト 4 2022/04/10 09:25
- バックアップ Windows11パソコンのデータを数クリックで完全に引っ越しするにはどうすれば良いでしょうか? 5 2022/10/11 14:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
WindowsでのPythonの挙動について
-
String""から型'Double'への変...
-
UserForm1.Showでエラーになり...
-
-2147418107 (&H80010005)
-
VBAでfunctionを利用しようとし...
-
VBA データ(特定値)のある最...
-
フランスの生年月日(jj/mm/aaaa)
-
On ErrorでエラーNoが0
-
エクセル関数を教えてください
-
mailstorehomeのエクスポートで...
-
数式は残し値をクリアするマク...
-
VC++2010で作成中に特定のエラ...
-
インポート時のエラー「データ...
-
文字列内で括弧を使うには
-
【VBA】ワークブックを開く時に...
-
ExcelVBAのDoEventsによるエラー?
-
マクロで"#N/A"のエラー行を削...
-
.VBSだとADODBのプロバイダが見...
-
Excel ピボットテーブル平均・...
-
error C2664: 'LPCTSTR' に変換...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
String""から型'Double'への変...
-
VBAでfunctionを利用しようとし...
-
お助けください!VBAのファイル...
-
文字列内で括弧を使うには
-
実行時エラー 438 の解決策をお...
-
マクロで"#N/A"のエラー行を削...
-
On ErrorでエラーNoが0
-
エクセルVBA 「On Error GoTo...
-
VBA データ(特定値)のある最...
-
実行時エラー'-2147467259(8000...
-
【VBA】ワークブックを開く時に...
-
VBでSQL文のUPDATE構文を使った...
-
ACCESSで値を代入できないとは?
-
マクロの「SaveAs」でエラーが...
-
Excel vbaについての質問
-
インポート時のエラー「データ...
-
Filter関数を用いた結果、何も...
-
「実行時エラー '3167' レコー...
-
バッチファイルで、あるスクリ...
おすすめ情報