Javaのような考え方でテキトーにコーディングしてたらハマった...。
debugでコンパイルしたら動くのに、releaseだと何故かサーバと通信できない...。
構成をグリグリいじってみたら今度はdebugでも動かなくなり、頭の中が混乱した。
落ち着いてトレースしてみると、サーバに送るメッセージが送る段階でメチャクチャに壊れていた。
ちなみにサーバへ送信するメッセージを生成する部分は関数に分けている。
正直、テキトーに作った関数を載せるのが恥ずかしいが、やっぱり載せちゃう。
//サーバに送る登録メッセージを作成する。 char* make_regist_req(int island_server_port, int island_reply_port, int performance){ char buf[128]; sprintf_s(buf, sizeof(buf), "island_registration:%d,%d,%d\n", island_server_port, island_reply_port, performance); return buf; }
研究用だしmallocじゃなく配列宣言でイイヤもう。とめんどくさがったのがまずかった。
改めて上のコードを見ると
な、感じなのだが、混乱してる最中は
( _, ,_) < make_regist_req()の呼び出し元でbufが参照されてるじゃねぇかよぉぉー!
_(__つ/ ̄ ̄ ̄/_
\/ ./
とマジで思ってた。どう考えてもヒープ脳でした。
今までの経験から考えてdebugで動いてreleaseで動かない場合はメモリー関連のエラーが多いねぇ。まぁ、debugの方も運良く動いてるだけの話なんだけれども。こーゆう煩わしさがないJavaはやっぱ楽だなぁとか思ってみたり。
#もうBoehm GC使っちゃいますか。