[過去ログ]
【初心者歓迎】C/C++室 Ver.101【環境依存OK】 [無断転載禁止]©2ch.net (1002レス)
【初心者歓迎】C/C++室 Ver.101【環境依存OK】 [無断転載禁止]©2ch.net http://mevius.5ch.net/test/read.cgi/tech/1500329247/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
765: デフォルトの名無しさん [sage] 2017/09/30(土) 01:55:47.47 ID:+yH9ha/d ちょっと不可解な部分があったから質問させてくれ string型のデータをサーバに送信したくてOSSの関数に渡しているんだが、 データが一部壊れてしまう 問題のコードは、 string str = "{id:abc, ... , }" void* payload = (void*) str.c_str(); send(payload, str.length()); これをやると、先頭の5バイトがうまく入らない いくら考えても全然理由がわからず、意味のないことだと思いつつも以下のコードを書いてみたら何故かうまくいった string str = "{id:abc, ... , }" char* tmp = (char*)malloc(str.length() * sizeof(char) + 1); strcpy(tmp, str.c_str()); payload = (void*)tmp; send(payload, str.length()); 下のコードを使えばうまく動いてるから問題ないんだけど、上のコードがダメな理由がわからずすごく気持ち悪い。 何か上の例だとまずい部分があるのかな? 送信関数は以下 send(void* payload, size_t length); 環境はVC++ 2012 Windows 7 64bit ちなみに、同じコードを別環境(gcc 4.4.7 Cent OS 32bit)で動かすと、両方うまくいった http://mevius.5ch.net/test/read.cgi/tech/1500329247/765
766: デフォルトの名無しさん [sage] 2017/09/30(土) 02:12:16.55 ID:/jgYbdHq >>765 c_str()ってどんな関数? http://mevius.5ch.net/test/read.cgi/tech/1500329247/766
771: 765 [sage] 2017/09/30(土) 10:38:13.12 ID:+yH9ha/d みんな回答ありがとう。 >>766 string型のメソッドで、文字列をconst char*にするやつ >>767,769 非同期送信にはなってるんだけど、sendの後に送信結果を受け取る関数を呼んでる。 そのあとでpayloadは解放されるようになってるから、送信完了までは実体は生きてると思う >>770 OSSの関数がそう定義されてるから変換したんだ {id:abc. ... , } のうち先頭5文字の{id:aがおかしくなってるんだよね・・ Wiresharkでみると、バイトコード88ってなってたけどなんでそうなったのかが全然わかんない http://mevius.5ch.net/test/read.cgi/tech/1500329247/771
777: デフォルトの名無しさん [sage] 2017/09/30(土) 23:53:50.61 ID:xUuIbR05 >>771 > そのあとでpayloadは解放されるようになってるから、送信完了までは実体は生きてると思う str.c_str() 渡した場合は str の寿命や変更で解放されることになる。 他のどこかで解放されるようになってるとしたら、そんなところに渡してはいけないと思う。 どこかで free されることになってるなら、 malloc したポインタを渡さないと 正しく動かないということで >>765 の結果で当然に思う。 「OSSの関数」というなら具体的な関数を明示すればもっと状況がわかるのに。 http://mevius.5ch.net/test/read.cgi/tech/1500329247/777
780: デフォルトの名無しさん [sage] 2017/10/01(日) 08:09:58.98 ID:a+6SxdIf 明示的に解放しないstringの方はそこを意識してなかった可能性もあるんじゃね? 非同期ってことは>>765でsendした関数からは一旦抜けてるでしょ? http://mevius.5ch.net/test/read.cgi/tech/1500329247/780
794: デフォルトの名無しさん [sage] 2017/10/04(水) 15:03:07.29 ID:B6Js2yoS >>788 いちいち古いVC入れ直すのめんどいから覚えてるんなら書いてほしいんだが あと>>765が解決したのかどうかも知りたい http://mevius.5ch.net/test/read.cgi/tech/1500329247/794
799: デフォルトの名無しさん [sage] 2017/10/05(木) 21:31:37.51 ID:Px1fI0/v いちいちけなさんと会話も出来んのかゴミクズが へー、じゃあ寿命は保証されてるわけか、そんなことはなかったはずだが >>765の問題は寿命の問題だと思うが、ケチつけるなら正確に書いてくれる? 混乱を招くだけのイチャモンとか何の役にも立たんわ http://mevius.5ch.net/test/read.cgi/tech/1500329247/799
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.054s