掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
スタックオーバーフローにならいようにするためには? (ID:67356)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
すみません、モデムが壊れて書き込めませんでした。 原因はpure virtual function call がなんども起きているからだと思います。これを直せばオーバーフローはしないと思うのですが、 自作のソースには、純粋仮想関数とかは定義していないので、なぜ発生するかはまだわかっていません。 >RecvDataBuff のデストラクタあたりが怪しい気がします。 ソースは以下のとおりです。多分問題ないと RecvDataBuff::RecvDataBuff() : CByteArray() { } RecvDataBuff::RecvDataBuff(const RecvDataBuff& src) { this->RemoveAll(); this->Copy(src); } RecvDataBuff::~RecvDataBuff() { } 以下については、関数が違うので、再帰ではないです。 情報不足で申し訳ありません。 >bool CSockServer::RecvData() >rtn = Recv( ptr, size ); >RecvData( ptr, size ); ソケットのクラスは CSockTcp CSockServer:CSockTcp があります。 受信スレッド Thread() { ・ CSockServer::RecvData(); ・ } 先に呼ばれる受信関数 bool CSockServer::RecvData() { struct MIF_0001 hed = {0}; long rtn; LPBYTE ptr = (LPBYTE)&hed; long size = sizeof(struct MIF_0001); RecvDataBuff tmp; long total; // ヘッダ部受信 while( size > 0 ) { rtn = Recv( ptr, size ); if ( rtn < 0 && rtn != SS_TIMEOUT ) { CloseSocket(); return false; } if ( rtn == SS_TIMEOUT ) { return true; } ptr += rtn; size -= rtn; } // 総サイズ // total = ntohs(hed.msg_size) + sizeof(hed); total = ntohs(hed.msg_size); tmp.SetSize( total ); // ヘッダサイズを除くサイズ size = total - sizeof(struct MIF_0001); if ( size > 0 ) { ptr = tmp.GetData(); ptr += sizeof(struct MIF_0001); RecvData( ptr, size ); } memcpy( tmp.GetData(), &hed, sizeof(struct MIF_0001) ); m_queue.push( tmp ); ::PostMessage( m_hWnd, WM_SS_RECV, m_threadNum, total ); return true; } ↑の関数から呼び出す受信関数 void CSockServer::RecvData( LPBYTE buf, long size ) { long rtn; LPBYTE ptr = buf; // ヘッダ部受信 while( size > 0 ) { rtn = Recv( ptr, size ); if ( rtn < 0 && rtn != SS_TIMEOUT ) { CloseSocket(); return; } if ( rtn == SS_TIMEOUT ) { return; } ptr += rtn; size -= rtn; } }
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.