C++相談室 part137

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 12c3-4saf)
垢版 |
2018/08/27(月) 16:02:00.94ID:vY3QDx2y0
次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512

C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part137
https://mevius.5ch.net/test/read.cgi/tech/1531558382/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1530384293/

■長いソースを貼るときはここへ。■
 http://codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)

----- テンプレ ここまで -----
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
2デフォルトの名無しさん (ワッチョイ 8ac3-4saf)
垢版 |
2018/08/27(月) 16:03:04.41ID:vY3QDx2y0
すまんスレ番ミスった
2018/08/27(月) 16:03:29.14ID:H/K1FpSE0
謝って許されることじゃないね
2018/08/27(月) 16:22:40.23ID:oonIPXiN0
こういうヤツがプログラミングするとえらいことになる
2018/08/27(月) 16:26:27.53ID:7PWma/MO0
1 はクズ
2018/08/27(月) 17:22:00.81ID:TVAO+u4x0
フェイルセイフ機構として
スレッドを立てて何分間あるいはレス何個までは
立てた人に限りタイトルを修正できる、
みたいな機能があっても良いかも知れん。

あるいは事前に「これから立てるスレッドは〜の後継である」
みたいな宣言ができて、重複や番号の間違いをチェックしてくれるとか。
2018/08/27(月) 17:25:07.23ID:H/K1FpSE0
>>6
それいいな。しばらく放置して、正当スレと認められたら
時間ギリギリで>>1の内容を書き換えるのにちょうどいい
2018/08/27(月) 18:21:58.03ID:xvf87VjGa
結局どうするん?
ここ使用?
2018/08/27(月) 22:39:11.81ID:oahf+hzU0
vector<object*>* func()
{
vector<object*>* vect = new vector<object*>;
for(int i = 0; i < 10; ++i)
{
object* obj = new object;
vect->push_back(obj);
}
return vect;
}

若干うろ覚えなんですけどこんな関数があります。ポインターを収納したベクターへのポインターを返すというものです。
まず質問なんですけど、関数内でnewして確保したメモリアドレスを返すってこれあまり良くないこと……ですよね?それともよくあることでしょうか。
それともう一つ。仮にmainなりどこかでこの関数の戻り値を受け取って利用したあと、メモリ解放はどうすればよいのでしょう
例えばdelete vectだけか、それともobject*をループで回して全部にdeleteすればいいのか、それとも両方やらにゃならんのか

よろしくお願いします。
10デフォルトの名無しさん (ワッチョイ 2561-+TX9)
垢版 |
2018/08/27(月) 22:45:10.99ID:X1STgCw40
どなたか c++でのソケット通信を使った複数人が使えるチャットのサンプルコード持ってる人いませんか?
ネットで色々調べてるんですけど、tcpじゃなくてUDPのやつだったりwindowsじゃなかったりcだったり書いてあることが難し過ぎたり...
そもそも1:1のコードばかりで複数人対応のサンプルコードが見つかりませんorz
11デフォルトの名無しさん (ワッチョイ 2561-+TX9)
垢版 |
2018/08/27(月) 22:46:54.38ID:X1STgCw40
複数人対応にするにあたって、複数のソケットを用意するのとselect関数が必要になると思うのですけど、selectの方はおそらく理解できています。
複数のソケットからアクセプトされるところの流れが全然分からないです。
今自分が書いてみたコードだとスタックオーバーフローというらしい現象が起こってしまってます。
2018/08/27(月) 22:47:25.25ID:CIUWIYCt0
難しくないものは存在しないとオモ
2018/08/27(月) 22:50:37.52ID:oonIPXiN0
>>9
ループで回して解放しないとダメ
JAVA脳だと放置するところだけど
2018/08/27(月) 22:57:17.24ID:AuFamtLr0
>>9
どっちもnewするなら両方deleteしないといけない(もちろんobjをループでdeleteするのが先
何が良い・良くないは自分で考えた方がいいよ

>>11
アクセプトされる、ってのは認識がおかしい
listenしたソケットに来た接続要求を、acceptで受け入れてクライアントとのセッションを開始する
サーバーはlistenで要求待ちするソケットと、acceptでクライアントと通信するソケットを持つ
クライアントはconnectでサーバーに接続して通信するだけ(ソケットは1つでよい)
2018/08/27(月) 23:00:46.13ID:CP0MczZVM
>>11
コードさらした方が話が早いよ
それより複数人だとどういうトポロジーで繋ぐの?
例えば4人だとどうなる?
2018/08/27(月) 23:09:16.63ID:W4qvSHyH0
>>10-11
次の本が、似たような状況(たしかレーシングゲームだったか)のサンプルを載せていたと記憶しています
https://www.amazon.co.jp/gp/product/4774117544/

Windows の winsock も UNIX のバークレーソケットと似たようなもので、若干の修正は必要ですが、そこはネットを参考にして書きなおせる範囲だと思います
この本は初版が 1992 年頃に出たときから htons()/ntohs() が書いていない、とボロカスだったんですが、私はとっても好きだったのです…
17デフォルトの名無しさん (ワッチョイ 2580-kiUO)
垢版 |
2018/08/27(月) 23:16:58.65ID:zX+eejgv0
listenで待ってるスレッド(もしくはプロセス、こっちならあとでfork()する)がいる

listenで待ってるスレッドやプロセスからacceptして
peerと新しいソケットで通信するスレッドを作る

もうコレで分かる
2018/08/27(月) 23:32:35.96ID:ba8BcfX30
>>9
ゲームエンジンの本には、よくメモリープールの実装が載っている。
こういう機能を抽象化した、モジュールを誰かが作っているはず

Effective とか、デザインパターンの本も読んだ方がよい
19デフォルトの名無しさん (ワッチョイ 2561-+TX9)
垢版 |
2018/08/27(月) 23:32:44.53ID:X1STgCw40
サーバーが自分用のソケット一つと複数個のユーザー用ソケットを作成し、ユーザー 一人につき一つのソケットが割り振られるイメージでした。
2018/08/27(月) 23:52:05.98ID:H8sSdLfla
こんな感じにpublicにもmainいてもエラーにならないのはどうしてですか?

Main.h

class CMain
{
public:
int main(int argc, char* argv[]);
};

Main.cpp

int main(int argc, char* argv[])
{
return 0;
}
21デフォルトの名無しさん (ワッチョイ ea5e-7kIV)
垢版 |
2018/08/27(月) 23:57:35.85ID:TZo7knfc0
一般関数のmainとメンバ関数Cmain::main()は別物だろうよ。
2018/08/28(火) 00:05:18.35ID:04IHxsB70
>>20
名前空間が違っていて区別がつくから同じ名前のものがあっても大丈夫。
2018/08/28(火) 00:18:40.52ID:wxxo3xcIa
>>21,22
なるほど、それもそうですね
2018/08/28(火) 07:30:50.31ID:r63k0nU70
>>13 >>14
ありがとうございました。やっぱ両方なんですね

>>18
メモリープール初めて知りましたがこんな方法あるんですね
あと上司がおよそ20年に渡って継ぎ足し継ぎ足ししてきたすぱg秘伝のコードなので今更構造変えられんのです……
2018/08/28(火) 07:39:23.68ID:oGnGbrSA0
スマポつかえよ!
2018/08/28(火) 07:44:24.16ID:BzDdgzNr0
上司のコードに文句言いつつデリートも知らん奴がなんか言っとる
2018/08/28(火) 07:49:16.32ID:oGnGbrSA0
勇んでデリートするようなコード書きたいか?
2018/08/28(火) 08:58:31.81ID:vCTFJ2QC0
>>24
リファクタリングの機会を設けないと秘伝が負債になるのがこの業界
2018/08/28(火) 08:59:48.56ID:TEJeUOom0
auto pointer, smart pointer ?
2018/08/28(火) 10:05:03.87ID:oGnGbrSA0
rip.auto_ptr.
31デフォルトの名無しさん (ワッチョイ 2561-+TX9)
垢版 |
2018/08/28(火) 15:32:29.83ID:2BUW4hJo0
>>19
1:1のソケットを4つ用意すれば4人でチャットできますよね?送ったメッセージをサーバーサイドが受け取って他の3人のソケットに送るイメージです
2018/08/28(火) 15:45:07.84ID:FmvTK/aC0
あー、それなら合ってるね
そのままのイメージで書いてみればいける
33デフォルトの名無しさん (ワッチョイ 2561-+TX9)
垢版 |
2018/08/28(火) 19:28:50.38ID:2BUW4hJo0
>>32
それぞれのソケットの中身で違うのはポートだけってことで大丈夫ですかね?
2018/08/28(火) 19:45:32.21ID:FmvTK/aC0
まぁポートだけ、というかリスニングの処理だけ特殊とは言えるかも
2018/08/28(火) 20:36:55.08ID:jw/yHSMpr
このスレって競プロerいる?
2018/08/28(火) 23:15:21.08ID:q8rsvszA0
>>35
いる
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況