• ベストアンサー

VC++で作成したソフトを実行するとエラーが出ます。

お世話になります。 初心者です。 OS XP、VC++ 6.0で開発しています。 今、RS232C通信用ソフト(MFC)を作成したのですが、ビルドもNo ErrorでOKでXP上では動いているのですが、Windows 2000 Profetionalでそのソフトを使用して、RS232C通信をしながらマイコン開発用のコンパイラでマイコンソフトのDebugをしているのですが、時々下記のコメントが出て、作成したRS232C通信用ソフトが勝手に落ちます。 何が問題なのでしょうか。 お力を貸していただけませんでしょうか。 "0x77fcb491"の命令が"0x00000038"のメモリを参照しました。メモリが"write"になることはできませんでした。プログラムを終了するには[OK]をクリックしてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • goosyu
  • ベストアンサー率58% (36/62)
回答No.3

>ClearCommError関数にて、16というエラー値を得ました。 ClearCommError関数でCE_BREAK(16)ということはハードウェアでブレーク信号を検出したことになります。ブレーク信号を検出すると該当する処理があれば対応させる必要がありますがXpのときに意識していないのであれば,単純に通信異常かもしれません。受信バッファをクリアするなどの処理が必要です。(通信ロジックが不明の為詳細にはわかりませんが・・・),いずれにせよClearCommError関数を再度コールしてエラーが無くなる状態まで面倒を見る必要があります。またブレーク信号検出時の処理があれば,そこに問題があるのかもしれません。

cpptext
質問者

お礼

お世話になります。 なるほど! ブレーク信号というのがあるんですね。 確かに、接続先の機器を落とすとソフトが落ちるので、その可能性が濃厚です。 CHECKしてみます。 ありがとうございました。

その他の回答 (2)

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.2

まあ、その通信プログラムのバグでしょう。たまたまXPでは症状が出なかったにすぎないかと。 VCのデバッガ上で通信プログラムを走らせるのが一番ですが、それが無理ならプログラムの各所でログを出力して、例外の発生個所を絞り込んでいくよりないでしょうね。

cpptext
質問者

補足

お世話になります。 ご返答有難うございます。 確かにエラーが見つかりました。 ClearCommError関数にて、16というエラー値を得ました。 その後すぐにGetLastError関数にて拡張エラーを確認したところ、0が帰ってきました。 XPでVC++を使ってデバッグしてもこのエラーは出てこないのですが、2000 profetional上でデバックするとでてきます。 どこをどのように直せばいいのでしょうか。 ご教示いただければ幸いです。

  • chie65535
  • ベストアンサー率43% (8523/19372)
回答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が返って来ているのを判定し忘れている部分がある」と思います。

cpptext
質問者

お礼

お世話になります。 詳細なご説明、有難うございます。 頑張ってバグの修正に努めます。 有難うございました。

関連するQ&A

  • いろんなソフトでエラー

    いろいろなソフトで同じエラーがでてできないことがいっぱいあるので心配です。 エラー内容はソフト起動時に 『"0x77fcb6a3"の命令が"0xfffffff8"のメモリを参照しました。メモリが"read"になることはできませんでした。 プログラムを終了するには[OK]をクリックしてください。』 というエラーメッセージがでて、ソフトが終了してしまいます。 難しい質問なんですが、どなたか原因わかりませんか?

  • [VC++6.0]他のソフト動作時のエラー 

    VC++6.0にてRS-232Cポートを利用した端末機との通信プログラムを作成しています。 このプログラムは、通常では問題ないのですが他のソフトを起動させることや、他のソフトで処理(重い処理の場合は顕著にでます)を行うと通信エラーが発生し、正常終了できません。 原因としては、他のソフトなどの処理の際に232Cポートからの応答信号が認識できていないため、エラーが発生しているような気がします。 Cプログラムはまだ初心者のため、この回避方法がわかりません。もしかすると単純な命令で回避できるのかもしれないのですが、わかる方がいれば教えてください。 ちなみに、開発環境はVC++6.0EnterPrise Edition、Win2000SP4(CPU=C-1.7G、MEM=512MB)です。 CPUの速度やメモリの容量により多少差はあるかも知れませんが上記ソフトをWinXPSP2のCPU=P4-3GHz、メモリ=1GBで実行してもメモ帳ソフトを起動しただけでエラーになる場合があります。 わからない点などありましたら補足しますので、よろしくお願いします。

  • アプリケーションエラーとでます。

    windows2000 professionalで規則性もなく WinMgmt.exe - アプリケーション エラー - としょっちゅう出てきます。 何もしていないのにいきなり出てきた!と言う感じです。 新しいソフトをインストールした記憶もなく、原因がよくわかりません。 "0x77fcb0c8"の命令が"0x2918e021"のメモリを参照しました。 メモリが"written"になることはできませんでした。 プログラムを終了するには[OK]をクリックしてください と表示され、OKをクリックすると普通に消え、また出てきます。 いったいこれは何なんでしょうか?? ウィルス的なものなんでしょうか? 時間がかかるということもあり、最近ウィルスチェックかけていません。 それがダメなんでしょうか? もし、解決できる方法があればぜひ教えて下さい。 できれば再インストールは避けたいところです。 よろしくお願いします。

  • VC++でのRS232C通信をサポートしてくれるソフトは?

    VC++6.0を仕事で使うことになったのですが、 VC++でのRS232C通信をサポートしてくれるソフトがあれば教えてください。 VBAのEasyCommのようなソフトはあるのでしょうか?

  • VC++でRS232C(COMポート通信)

    VC++でRS232C(COMポート)通信をするソフトを作成していますが、COMポートが開けず通信ができません。ポートが開けない理由を追跡する方法はありますか?

  • VC++.NETを使用したRS232c通信プログラム

    RS232c通信をVC++.NETを用いてPSoCマイコンと通信を行うGUIを作成しようとしています。PSoCとハイパーターミナルを用いた送受信の通信は成功しました。そこで受信ボタンをクリックすると、PSoCから送られてくる文字列を受信してエディットコントロールに表示させるという、ダイアログボックスベースで作成したアプリケーションを作っているんですが、文字列をうまく受信してくれません.現状は「・・・」といった文字をエディットコントローラに表示しており、実際は「welcome」という文字列をPSoCより受信しなければならないんですが・・・。 RS232c通信用のAPIは以下のサイトより使わせてもらっています↓http://7ujm.net/C++/Rs232c.h.html 自分が作成したプログラムはボタンをクリックすることで発生するイベントハンドラ関数内に以下のプログラムを書いているだけです。↓ void CMy090630Dlg::OnBnClickedButton1() { RS232c rs; rs.Connect();//ポートcom5と接続を開始する char w[100]; rs.Read_CRLF(w,100);//PSoCより文字列を受信 m_edit1.SetWindowText(w);//エディットコントロールに  受信文字列を表示させる } VC++をはじめたばかりの初心者で、言葉の間違いなどあるかもしれませんが、教えてください。

  • VC++2010 画面なしのアプリケーション作成

    VC++2010 画面なしのアプリケーションを作成したいんですが、VC++2010で作成する方法が調べても出てこなかったので質問させていただきました。 環境はWindows7で開発環境はVisualStudio2010 使用言語はC++です。 やりたいこととして、マイコンみたいにプログラムを組みたいと思っています。 メイン関数から始まって Wihile(1) ;で待機し SetTimer(1,1000,NULL)などのタイマ割込みで処理を行う形です。 よろしくお願いします。

  • Spybotを実行したらエラーが表示されるようになりました。

    友達がSpybotをダウンロードをして実行しました。そして完了して再起動してインターネットをしようと思いIEをクリックしたのですがエラーと表示され強制終了されました。エラーの内容は以下の通りです。 Runtime Error! Program:C\Program Files\Internet Explorer\iexplore.exe abnomal program termination と表示されOKをクリックすると "0x03b7d10e"の命令が"0x00000004"のメモリを参照にしました。 メモリが"read"になることは出来ませんでした。 プログラムを終了するにはOKをクリックして下さい。 となりIEが開けません。同様にフォルダやゴミ箱、マイコン、コンパネも同じメッセージが表示され開く事が出来ません。 フォトショップやエクセルは普通に出来ました。 いろんなサイトを見たのですがどうしていいのか分からず質問させてもらいました。 このままではPCが使えないのでどなたか治し方を教えてください。

  • アプリケーションエラー

    私はvisual studio2005でアプリケーションプログラムを作成したりしているのですが、開発したプログラムを起動したとき、時々【"0x7c97a754"の命令が"0x00000000"のメモリを参照しました。メモリが"read"になることはできませんでした。プログラムを終了するには[OK]のボタンをクリックください】というウィンドウが表示され、プログラムが止まってしまいます。[OK]ボタンを押せば、プログラムが起動しだすのですが、毎日定時にタスク起動するプログラムですので、このようなエラーはどうしても避けたいところであります。これの対処法はありますでしょうか?

  • エラーが出てしまい作成できず次にいけません!

    こんにちわ、あるソフトで文書の作成をしています。(電子内容証明) ファイルを作成中です。 ファイルを作成しようとすると、 「しばらくお待ちください」となり、画面が一旦切り替わるのですがまた戻ってしまい、 imcreate.exe-アプリケーションエラー "○○"の命令が”○○”のメモリを参照しました。 メモリが"read"になることはできませんでした。 と、出てしまい、「OK」を押すと、又次に エラー TIF変換ソフトが正常に終了できませんでした と出ます。1度は出来たのですが最近何度やってもできません。どなたかお詳しい方宜しくお願いします! 使用しているのはXP   SP-2です。 SP2は動作環境が悪いらしいのですが1度はできたので何とかすれば又できるのではないかと思い、質問させていただきました^^;

専門家に質問してみよう