シリアル通信を行うアプリケーションをVistaで動かしたところ、70分程度すると不正終了する問題が発生しました。(MFC42.dllでc0000005アクセス違反が発生)
まだ具体的にドコというのがわからないのですが、ネットを調査しているとReadFileがメモリリークしてしまうような記載を見つけました。
http://sakurahina.seesaa.net/category/7299555-3.html
そこで、ReadFileを使わない方法は無いものかと探しているのですが見つかりません。
ReadFileを使わない方法をご存知の方がいらっしゃいましたら、ご教授ください。
なお、当方VC++6.0で開発しております。
追記
「ReadFileを使わない」は、夜中探してみましたがやはり見つかりませんね〜。
そこでReadFileを使って、メモリリークが発生するとして・・・
何らかの手段でライブラリが確保したメモリを解放するなんて荒業は可能なんでしょうか?
とにかく、強制終了に至らなければどんな解決策でも構いません。
皆さま、アドバイスお願いいたします。
真に ReadFile のリークが原因である、と既に確定しているわけ?
そうでないならこっち方向の追及は時間の無駄だと思うが。
とりあえず当方の部署で作ったシリアル通信モニターソフトは
24時間連続駆動で1ヶ月経っても死なないよ。
1000回自分のコードを疑って、その後 Windows/デバイスドライバを疑おう。
VISTA上でのVC+6.0の件
http://madia.world.coocan.jp/cgi-bin/Vcbbs/wwwlng.cgi?print+200608/06080035.txt
開発は他のOS上でやっておられると推測しますが、基本的に
VISTA上では動作保障が無いので上位バージョンのものをお使い
なり、動作させましょう。
以上。参考まで
tetrapodさん、おはようございます
>真に ReadFile のリークが原因である、と既に確定しているわけ?
>そうでないならこっち方向の追及は時間の無駄だと思うが。
まだ、半信半疑の状態です。
>とりあえず当方の部署で作ったシリアル通信モニターソフトは
>24時間連続駆動で1ヶ月経っても死なないよ。
そうですか。貴重な情報ありがとうございます。
差し支えなければ、教えてください。
そちらもVC++6.0で作成+vistaでしょうか?
>1000回自分のコードを疑って、その後 Windows/デバイスドライバを疑おう。
今、疑って何回目かな〜?
なんて、そんな冗談を言っている場合じゃない!
もう一度考え直しですね。
オショウさん、おはようございます
>開発は他のOS上でやっておられると推測しますが、基本的に
>VISTA上では動作保障が無いので上位バージョンのものをお使い
>なり、動作させましょう。
開発はXpを使用しています。
Vistaで動作させる場合、Xp互換をチェックしているのですが・・・
(OSの問題じゃないのかな〜???)
デバッグ手法のアドバイスですが、疑わしい行。本件の場合
ReadFile()らしいですが、そこをコメントアウトして、
エラー無く動作するようにコードします。
この状態でメモリーリークが発生するなら、他の原因ですね。
発生しなくなるなら、ReadFile()に与えている引数などを
固定配列などにして検査します。それでもおかしいとなると
CreateFile()から疑いましょう。
まぁ、当然やってると思いますけど。
ツイート | ![]() |