トップページ⇒tech
26コメント8KB

Win2000対応

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
いままでWin98、WinNTで作っていたアプリを、
Win2000で動かしてみたら落ちました。
「"○○"の命令が"○○"のメモリを参照しました。
メモリが"read"になることはできませんでした。」
というメッセージがでてしまいます。
誰か原因を予測できる方、いらっしゃいませんか?
0002デフォルトの名無しさんNGNG
メモリリークしてんだろ
作ったやつに連絡しとけ
00031NGNG
>>2
たぶん、そうだと思うんですが、
場所を特定できないのです。
製作者は退職してしまったし…

Windows2000以外では問題なく動くので、
それがヒントにならないかな?と思ったのですが…
0004デフォルトの名無しさんNGNG
2の答えにすべてが集約しているような…。
00052NGNG
コンパイルするときmapファイルとcodを吐くように設定して
該当アドレス付近をトレースすれば?
00061NGNG
Win2000だからどうこうという問題ではないのでしょうか?
>>2
mapファイルといのは作ることができました。
codといのはなんなのでしょうか?
00072NGNG
MSのOSはクソクソといわれてるが、
そのプログラムの方がよっぽどクソだろ。
Winのせいにするな。
むしろ今まで動いてたのがおかしいんだよ。

codはマシン語+アセンブルリスト出力すると吐き出されるよ。
0008デフォルトの名無しさんNGNG
動いていたのは”たまたま”で潜在的に問題をもっていたものが
Win2000で現れただけだろう。
mapやcodをつくるまでもなく、
ソース持っているならWin2000上でデバッガ使えばいいんじゃない?
0009デフォルトの名無しさんNGNG
多分配列のオーバーかなんかでしょ。
オーバーした量が少しだから今までは特に影響なし。
NT2000はメモリのエラー検出が厳しいんじゃない?
0010デフォルトの名無しさんNGNG
>>8
まったくだ。
でもこの手の「デバッグすりゃいいじゃん」で悩んでるやつ多いよな。
捨て身のネタか?
00111NGNG
みなさん、きびしい意見をありがとうございます。
デバッグすればいいんですが、
デバッグモードでは症状がでないのです。
デバッグビルドしたものを直接実行する場合は落ちるのに…

なので、メッセージボックスを挿入しまくって地道にやってみます。
00122NGNG
デバッグモードのみ再現しないんだったら
俺が言ったようにcodとmapでトレースしろよ
まさかリリースじゃ作れないとか思ってんのか?
00132NGNG
あ、はずしたな。

>デバッグモードでは症状がでないのです。
>デバッグビルドしたものを直接実行する場合は落ちるのに…

OSからすべて入れなおせ。
絶対おかしい
0014>NGNG
だいたいの場合、そんな動きをするのは、
ヒープがらみのバグです。

delete,free,HeapFree,GlobalFreeや
バッフアオーバランを、
総ざらいするといいかもしれません。

あと、変則にDestroyWindow()など、ぶち壊し系APIを呼ぶと、
Windows2000は落ちます。(他のOSでは落ちません)

ちょっと凝った処理をしているところをあたってください。
0015デフォルトの名無しさんNGNG
>>11
落ちた後でデバッグできないってこと?

候補としてはメモリ破壊だな。>>9
Win2000だとたしかメモリの初期化が変わってたから、
変数の初期化し忘れとかで要らんエラーが出ることがあったような。
スマン。うろだ。とんでもないホラ吹いてるかもしれん。
まずはデバッグしてみ。

どっちにしろドキュソAPであることが判明したわけだ。
00168NGNG
開発環境が不明だがVC++での話しをすると
ジャストインタイムデバッグを使えばいいのでは?
0017Billy GateNGNG
初心者が言うのもなんだが、おそらくメモリリークだと思う。C++であれば
assertを検索して、間違ってランタイムのエラーハンドリングとして使ってな
いかチェックしてみたらどうだ(よっぽどの初心者でないとないはずだが)。。。
0018デフォルトの名無しさんNGNG
死ね
0019デフォルトの名無しさんNGNG
リークとオーバーランの区別がついとらんやつが多いな。
誤解の元だぞ。
0020名無しサンプリング@48kHzNGNG
VC++だったら、
>>1 の「"○○"の命令が...
のアドレスをブレークポイントに入れて走らせてみい。(Alt+F9すれ)
>>11 の 「症状がでない...
で通り過ぎてたところで止まる...こともあるよ。
00211NGNG
デバッグ方法ひとつをとってもいろいろあるのですね。
とても勉強になります。
落ちている場所はMFCのAfxMsgFilterHookという関数のreturn するとこのようです。
この関数の意味するところはさっぱりわかりません。

それとは別に、
落ちる処理は別スレッドで動いているのですが、
スレッドを終了するタイミングをちょっとでも遅らせると、
絶対に落ちないこともわかりました。
そのせいで、VCから実行したときには落ちなかったのかも…
0022名無しNGNG
purifyを使いなさい。
お試し版があるよ。

http://www.rational.co.jp/products/purify_nt/
0023デフォルトの名無しさんNGNG
便乗質問。
95/NTではちゃんと終了するのに、2000だと終了したように見せかけて
実はプロセスは残ってるって症状見たことある?タスクマネージャー
からじゃないと終了できないの。2000のメッセージ処理ってビミョウに違くない?
0024デフォルトの名無しさんNGNG
(アンダバが先頭に無いが、多分AfxMsgFilterHookではなく_AfxMsgFilterHookだとして)
_AfxMsgFilterHookはWindowメッセージをWndProcが処理する前にこっそり処理する関数。
たしかモーダルダイアログをMFC独自にやるための処理だったと思った。
VC98\MFC\SRC\THRDCORE.CPP(705)でも見て確認してくれ。

思うに強引なスレッドの終了をしていないか?
それと、このときのpThreadってまともになっている?

あまり人に頼りすぎていると水野君って言うぞ
00251NGNG
24さん、ありがとうございます。

23さんの言っていることと同じ症状なのかもしれません。
どうやら、プロセスが残ってしまっているようです。
実は私は、スレッド処理とかあまりよく分かっていない厨房なので、
勉強を兼ねて、詳しく見てみようかと思います。>強引なスレッド終了
0026デフォルトの名無しさんNGNG
>23
ハンドルクローズしてるか?
■ このスレッドは過去ログ倉庫に格納されています