Vistaでシリアル通信


kiku  2010-12-14 11:25:56  No: 72143

シリアル通信を行うアプリケーションをVistaで動かしたところ、70分程度すると不正終了する問題が発生しました。(MFC42.dllでc0000005アクセス違反が発生)

まだ具体的にドコというのがわからないのですが、ネットを調査しているとReadFileがメモリリークしてしまうような記載を見つけました。
http://sakurahina.seesaa.net/category/7299555-3.html

そこで、ReadFileを使わない方法は無いものかと探しているのですが見つかりません。
ReadFileを使わない方法をご存知の方がいらっしゃいましたら、ご教授ください。

なお、当方VC++6.0で開発しております。


kiku  2010-12-14 15:49:58  No: 72144

追記

「ReadFileを使わない」は、夜中探してみましたがやはり見つかりませんね〜。

そこでReadFileを使って、メモリリークが発生するとして・・・
何らかの手段でライブラリが確保したメモリを解放するなんて荒業は可能なんでしょうか?

とにかく、強制終了に至らなければどんな解決策でも構いません。
皆さま、アドバイスお願いいたします。


tetrapod  2010-12-14 17:49:08  No: 72145

真に ReadFile のリークが原因である、と既に確定しているわけ?
そうでないならこっち方向の追及は時間の無駄だと思うが。

とりあえず当方の部署で作ったシリアル通信モニターソフトは
24時間連続駆動で1ヶ月経っても死なないよ。

1000回自分のコードを疑って、その後 Windows/デバイスドライバを疑おう。


オショウ  2010-12-14 17:53:18  No: 72146

VISTA上でのVC+6.0の件

http://madia.world.coocan.jp/cgi-bin/Vcbbs/wwwlng.cgi?print+200608/06080035.txt

開発は他のOS上でやっておられると推測しますが、基本的に
VISTA上では動作保障が無いので上位バージョンのものをお使い
なり、動作させましょう。

以上。参考まで


kiku  2010-12-14 18:00:20  No: 72147

tetrapodさん、おはようございます

>真に ReadFile のリークが原因である、と既に確定しているわけ?
>そうでないならこっち方向の追及は時間の無駄だと思うが。
まだ、半信半疑の状態です。

>とりあえず当方の部署で作ったシリアル通信モニターソフトは
>24時間連続駆動で1ヶ月経っても死なないよ。
そうですか。貴重な情報ありがとうございます。
差し支えなければ、教えてください。
そちらもVC++6.0で作成+vistaでしょうか?

>1000回自分のコードを疑って、その後 Windows/デバイスドライバを疑おう。
今、疑って何回目かな〜?
なんて、そんな冗談を言っている場合じゃない!
もう一度考え直しですね。


kiku  2010-12-14 18:08:48  No: 72148

オショウさん、おはようございます

>開発は他のOS上でやっておられると推測しますが、基本的に
>VISTA上では動作保障が無いので上位バージョンのものをお使い
>なり、動作させましょう。
開発はXpを使用しています。

Vistaで動作させる場合、Xp互換をチェックしているのですが・・・
(OSの問題じゃないのかな〜???)


仲澤@失業者  2010-12-14 19:32:07  No: 72149

デバッグ手法のアドバイスですが、疑わしい行。本件の場合
ReadFile()らしいですが、そこをコメントアウトして、
エラー無く動作するようにコードします。
この状態でメモリーリークが発生するなら、他の原因ですね。
発生しなくなるなら、ReadFile()に与えている引数などを
固定配列などにして検査します。それでもおかしいとなると
CreateFile()から疑いましょう。
まぁ、当然やってると思いますけど。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加