どうもすいません、kaitenです。
自力で何とかしようと一週間ほど悩んだのですが手も足も出ないので質問させていただきます。
現在、VC++2008EE、vista、DxLibで通信プログラムを組んでおり、受信時に領域外エラーが発生してしまいます。
ソースはすべて添付するのでそちらを見てください。
Sessionが親、Session2が子です。Session2を相手が開いていないとSessionはmissと表示して終了します。
チャットを作るためなので文字列の送受信を行っています。半角50文字まで送受信できるようにしようとしたのですが、半角18文字以上だと受信側がおちてしまいます。
VCのデバッガで追ってみようかと思ったのですがソースが表示できないとなり、逆アセンブルしようとしたので諦めました。
情報が不足でしたら言っていただければ出せる限り書きます。どうかよろしくお願いします。
DxLibで通信時のバグ
Re:DxLibで通信時のバグ
>半角18文字以上だと受信側がおちてしまいます
S_network::Draw() の [color=sans-serif]buf2.insert(now+width, "\n")[/font] が怪しそうですね。
buf2には送られてきた最大 50文字の文字列が入っているはずですが、それに対して
挿入しようとしている位置が now+width …… widthは320なので
文字列の 320以降の位置に挿入しようとしています。
当然そんな位置に文字列はないので、これはまずいでしょう。
18文字という境界は while(num*size>width) が実行されるかどうかの
境目だったのではないでしょうか。
Re:DxLibで通信時のバグ
Justyさん、ありがとうございます。
ご指摘の通りで、丸々消したところ解決しました。
DrawFormatStringがそもそも\nに非対応であることをすっかり忘れていました。よくよく考えたら意味ない処理……
これで解決とします。結果的とはいえ不適切な題名をつけてしまい申し訳ございません。
ご指摘の通りで、丸々消したところ解決しました。
DrawFormatStringがそもそも\nに非対応であることをすっかり忘れていました。よくよく考えたら意味ない処理……
これで解決とします。結果的とはいえ不適切な題名をつけてしまい申し訳ございません。