エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。
【アップローダー】(質問が長い時はココ使うと便利)
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)
前スレ
【初心者歓迎】C/C++室 Ver.100【環境依存OK】
http://mevius.2ch.net/test/read.cgi/tech/1478440682/
【初心者歓迎】C/C++室 Ver.101【環境依存OK】 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2017/07/18(火) 07:07:27.20ID:vzMDiUgd
151デフォルトの名無しさん
2017/07/29(土) 11:26:00.62ID:zJVnUUbX152デフォルトの名無しさん
2017/07/29(土) 11:29:49.09ID:USfv5Coy153デフォルトの名無しさん
2017/07/29(土) 11:57:02.87ID:ODSH1Ehs ことごとく的はずれな指摘で笑たわ
154デフォルトの名無しさん
2017/07/29(土) 12:12:55.39ID:cYfk9kB4 >>150
お前アルゴリズムとか論理に弱いだろw
お前アルゴリズムとか論理に弱いだろw
155デフォルトの名無しさん
2017/07/29(土) 12:15:08.54ID:14mINgXT プログラム板ってみんなこんな感じなの?
とりあえずバカにする
みたいな
とりあえずバカにする
みたいな
156デフォルトの名無しさん
2017/07/29(土) 12:16:28.94ID:qNmrQnXF せやで
157デフォルトの名無しさん
2017/07/29(土) 13:01:38.77ID:MwwfsD4U158デフォルトの名無しさん
2017/07/29(土) 13:20:13.10ID:FYOlqRfm >>157
わけわかんないオレオレコードより、テスト済みの標準ライブラリ関数のほうが信頼できるから
わけわかんないオレオレコードより、テスト済みの標準ライブラリ関数のほうが信頼できるから
159デフォルトの名無しさん
2017/07/29(土) 13:24:20.64ID:14mINgXT 安易にライブラリを使うから、パフォーマンスがどんどん悪くなるんだな
160デフォルトの名無しさん
2017/07/29(土) 13:47:21.71ID:E5EEKRTu >>155
自分の知識目一杯使って的はずれなマウンティングしてる奴がいるだけ w
自分の知識目一杯使って的はずれなマウンティングしてる奴がいるだけ w
161デフォルトの名無しさん
2017/07/29(土) 15:25:53.36ID:wF9WnZrE あと、自分がコメントできそうな話題になるとここぞとばかりに知識を披露しようとして、
主題からずれたことを言い出したり、
さらにそれに間違いがあって余計なツッコミや攻撃的コメントを呼び込むのも
よく見る風景。
主題からずれたことを言い出したり、
さらにそれに間違いがあって余計なツッコミや攻撃的コメントを呼び込むのも
よく見る風景。
162デフォルトの名無しさん
2017/07/29(土) 15:47:58.67ID:0zBFZ9bK さほど広い範囲を読んでるわけじゃないけど、
C++関連は特に殺伐としてる感じはあるな。
C++関連は特に殺伐としてる感じはあるな。
163デフォルトの名無しさん
2017/07/29(土) 15:56:27.65ID:gp3BUyJn >>160 ←こういうのもマウンティングだよな。
164デフォルトの名無しさん
2017/07/29(土) 16:15:28.13ID:mj0H/MXI >>159
まずは意図が伝わるようにと言う意味でシンプルに書くことが重要。
標準ライブラリ使用は最低限のマナー。
チーム開発してると、上記を踏まえずオレオレ判断でパフォーマンスガー言っている人が、一番迷惑なんだよね。
まずは意図が伝わるようにと言う意味でシンプルに書くことが重要。
標準ライブラリ使用は最低限のマナー。
チーム開発してると、上記を踏まえずオレオレ判断でパフォーマンスガー言っている人が、一番迷惑なんだよね。
165デフォルトの名無しさん
2017/07/29(土) 16:53:05.23ID:V9CC1YIs 仕事だとメモリ効率や実効速度より開発効率が優先されるからな
166デフォルトの名無しさん
2017/07/29(土) 16:56:37.35ID:USfv5Coy パフォーマンスどうこうで、標準ライブラリ使わなくても許されるのは、mkl開発チームとか、eigenのコミッターレベル
167デフォルトの名無しさん
2017/07/29(土) 17:01:43.15ID:E0esoNX5168デフォルトの名無しさん
2017/07/29(土) 17:07:45.04ID:zJVnUUbX >>163
鏡見た方がいいと思うよ w
鏡見た方がいいと思うよ w
169デフォルトの名無しさん
2017/07/29(土) 17:18:24.12ID:WkR4K9lF170デフォルトの名無しさん
2017/07/29(土) 17:19:42.35ID:mj0H/MXI171デフォルトの名無しさん
2017/07/29(土) 17:20:19.90ID:mj0H/MXI てか、パフォーマンス関係ねー
172デフォルトの名無しさん
2017/07/29(土) 17:24:23.71ID:E0esoNX5173デフォルトの名無しさん
2017/07/29(土) 17:26:24.48ID:mj0H/MXI174デフォルトの名無しさん
2017/07/29(土) 17:30:02.48ID:mj0H/MXI ちょっとテンパったけど、そのレベルなら正直どっちでも構わないな。
コメントがあれば。
コメントがあれば。
175デフォルトの名無しさん
2017/07/29(土) 17:50:22.46ID:E0esoNX5176デフォルトの名無しさん
2017/07/29(土) 17:53:27.93ID:14mINgXT177デフォルトの名無しさん
2017/07/29(土) 21:53:58.73ID:JdwUdvlQ178はちみつ餃子 ◆8X2XSCHEME
2017/07/29(土) 23:46:27.56ID:HavpCAcr 個人的には BENCODE がなかなかいいんじゃないかと思ってる。
179デフォルトの名無しさん
2017/07/30(日) 12:35:48.46ID:GR0hOB2I180デフォルトの名無しさん
2017/07/30(日) 17:25:43.33ID:w5RmXCUD enum EMFType
{
MF_INT, // 符号付き整数
};
// いろいろなデータを1つの関数で表示します
void MultiFunc(EMFType type, unsigned int data)
{
switch(type)
{
case MF_INT : cout << (int)data << endl; break;
}
}
int main()
{
int a = -10;
MultiFunc(MF_INT , a);
return 0;
}
実行結果
-10
unsigned int にマイナスの値を渡してるんですが、そのまま出力されます。
これが仕様だとすると、パラメーターにunsigned int を指定する意味はなんなんでしょうか?
{
MF_INT, // 符号付き整数
};
// いろいろなデータを1つの関数で表示します
void MultiFunc(EMFType type, unsigned int data)
{
switch(type)
{
case MF_INT : cout << (int)data << endl; break;
}
}
int main()
{
int a = -10;
MultiFunc(MF_INT , a);
return 0;
}
実行結果
-10
unsigned int にマイナスの値を渡してるんですが、そのまま出力されます。
これが仕様だとすると、パラメーターにunsigned int を指定する意味はなんなんでしょうか?
182デフォルトの名無しさん
2017/07/30(日) 18:49:49.76ID:xziOu8cb >>181
なんでcoutでintにキャストしてんの
なんでcoutでintにキャストしてんの
184デフォルトの名無しさん
2017/07/30(日) 18:57:01.02ID:wjBL4Xoh185デフォルトの名無しさん
2017/07/30(日) 20:43:43.49ID:w5RmXCUD >>181
ありがとうございます。コンバイラかバージョンの問題ですかね。
>>182
http://www7b.biglobe.ne.jp/~robe/cpphtml/index.html
ここで勉強してたら出てきたんですが、完全には書いてること理解できてないんで何でかはわかりません。
ありがとうございます。コンバイラかバージョンの問題ですかね。
>>182
http://www7b.biglobe.ne.jp/~robe/cpphtml/index.html
ここで勉強してたら出てきたんですが、完全には書いてること理解できてないんで何でかはわかりません。
186デフォルトの名無しさん
2017/07/30(日) 20:54:24.26ID:1HGPNMYb >>180
cout時にintにcastしているからでは?
cout時にintにcastしているからでは?
187デフォルトの名無しさん
2017/07/30(日) 21:21:54.63ID:wjBL4Xoh188デフォルトの名無しさん
2017/07/30(日) 21:40:38.31ID:K4rJr1Oo >なぜ (int) のキャストをしているのかは読み取れないが
ふむふむ、これがイケヌマと言う奴だな
ふむふむ、これがイケヌマと言う奴だな
189デフォルトの名無しさん
2017/07/30(日) 21:42:16.93ID:IhAKIxVt オマエ読み取れたの?
190デフォルトの名無しさん
2017/07/30(日) 21:46:15.66ID:K4rJr1Oo これが読み取れない者はC/C++より国語の勉強をした方がよいのではないか
191デフォルトの名無しさん
2017/07/30(日) 21:49:30.37ID:9ZftmVJd 業務ではよくあるよ。
バグか仕様か分らないっての。書いた本人は既にいなくて誰も答えを知らない。
バグか仕様か分らないっての。書いた本人は既にいなくて誰も答えを知らない。
192デフォルトの名無しさん
2017/07/30(日) 22:21:43.69ID:pLyoXQEm どこの業務だよ。仕様残せよ
193片山博文MZ ◆T6xkBnTXz7B0
2017/07/30(日) 22:28:24.05ID:aW4ocSFO 型消し、type eraserだから、データ構造に意味が無ければ、悪い設計だろう。
194デフォルトの名無しさん
2017/07/30(日) 22:31:00.66ID:ynobldaf195デフォルトの名無しさん
2017/07/30(日) 22:31:49.27ID:K4rJr1Oo >type eraser
まさか、type erasureのつもりだった!?
まさか、type erasureのつもりだった!?
197デフォルトの名無しさん
2017/07/30(日) 22:38:07.55ID:K4rJr1Oo >>194
パラメーターの型は適当に決めたもので、EMFTypeで指定されたint型で取り出すのが目的だからだろう
「いろいろなデータを1つの関数で表示します」と書かれているのだから
イメージは↓
https://wandbox.org/permlink/WhWaxSM5nHZdAj9n
パラメーターの型は適当に決めたもので、EMFTypeで指定されたint型で取り出すのが目的だからだろう
「いろいろなデータを1つの関数で表示します」と書かれているのだから
イメージは↓
https://wandbox.org/permlink/WhWaxSM5nHZdAj9n
198片山博文MZ ◆T6xkBnTXz7B0
2017/07/30(日) 22:42:59.84ID:aW4ocSFO そのインターフェース、なんか意味があるの?
199デフォルトの名無しさん
2017/07/30(日) 22:49:59.18ID:hW0bjdhb type erasureは意味違うけどね
200デフォルトの名無しさん
2017/07/30(日) 23:12:02.27ID:K4rJr1Oo これはきっとロベールさんが知恵を絞って考えた、徐々に発展していく例題だったに違いない
と思って調べたら単なる型変換の説明だった
と思って調べたら単なる型変換の説明だった
201デフォルトの名無しさん
2017/07/30(日) 23:35:50.02ID:w5RmXCUD202デフォルトの名無しさん
2017/07/31(月) 00:05:24.36ID:rlOfWFsH int ⇔ unsigned intだからそれ程でもないけど
たかが型変換と思って単純そうに見えて実は深い
たかが型変換と思って単純そうに見えて実は深い
203デフォルトの名無しさん
2017/07/31(月) 04:51:20.26ID:eXoHYgix もしかしてunsigned int a = -10が10だと思ってるじゃ
204デフォルトの名無しさん
2017/07/31(月) 07:41:44.42ID:2pZH8HVB >>184
ごめんアンカミスだ
ごめんアンカミスだ
205デフォルトの名無しさん
2017/07/31(月) 08:13:27.51ID:QJrBCtHy unsigned intとintの変換って戻る保証あったっけ?
教えてエロい人
教えてエロい人
206デフォルトの名無しさん
2017/07/31(月) 09:37:11.53ID:8MdXXwK/ ない
207デフォルトの名無しさん
2017/07/31(月) 10:27:16.23ID:b0IxVlKH そうなの?
補数表現が違うと戻らなくなるんだっけ?
補数表現が違うと戻らなくなるんだっけ?
208デフォルトの名無しさん
2017/07/31(月) 12:46:28.35ID:oDbItPw6 いつもの
・現実にはダメな処理系はない
けど
・仕様では保証されない
って奴じゃね?
・現実にはダメな処理系はない
けど
・仕様では保証されない
って奴じゃね?
209デフォルトの名無しさん
2017/07/31(月) 17:41:18.97ID:ULiYNE/a この速さなら言える
unsigned intが分からない
少なくともunsignedの-10が10じゃないことは分かった
unsigned intが分からない
少なくともunsignedの-10が10じゃないことは分かった
210デフォルトの名無しさん
2017/07/31(月) 17:52:47.90ID:4+hbusvk 俺もunsignedに負数を代入した場合
どーなるのかわかってなかったわ
つーか、そんな処理入れる機会なくね?
わざわざバグったコード書いて
どうなるんですかって聞いているようなもん
どーなるのかわかってなかったわ
つーか、そんな処理入れる機会なくね?
わざわざバグったコード書いて
どうなるんですかって聞いているようなもん
211片山博文MZ ◆T6xkBnTXz7B0
2017/07/31(月) 18:12:00.47ID:tXq0mJzu intが32ビットの整数と仮定すると、
-1==0xFFFFFFFF。
これに1を足すと、オーバーフローして
0==0x00000000
となる。
-2は-1==0xFFFFFFFFよりも1だけ小さいので0xFFFFFFFEだ。
-1==0xFFFFFFFF。
これに1を足すと、オーバーフローして
0==0x00000000
となる。
-2は-1==0xFFFFFFFFよりも1だけ小さいので0xFFFFFFFEだ。
212デフォルトの名無しさん
2017/07/31(月) 18:19:04.62ID:RCGkVO1K 処理系依存な内容とそうじゃない内容はちゃんと区別しよう
213デフォルトの名無しさん
2017/07/31(月) 18:23:58.10ID:2pZH8HVB >>209,210
仮にこの範囲の整数を扱える型(X型)があったとすると
-4 -3 -2 -1 0 1 2 3 4
unsigned X型はこの範囲を扱える
0 1 2 3 4 5 6 7 8
X型の-1は-1
unsigned X型の-1は8になる
同じ数だけ(この場合9つ)表現できるのは変わらず
unsignedは最小値が0になる
仮にこの範囲の整数を扱える型(X型)があったとすると
-4 -3 -2 -1 0 1 2 3 4
unsigned X型はこの範囲を扱える
0 1 2 3 4 5 6 7 8
X型の-1は-1
unsigned X型の-1は8になる
同じ数だけ(この場合9つ)表現できるのは変わらず
unsignedは最小値が0になる
214片山博文MZ ◆T6xkBnTXz7B0
2017/07/31(月) 19:07:02.18ID:tXq0mJzu 符号つき(signed)の値の場合、一番上のビット(最上位ビット)を符号として扱う。そういう決まりになっている。
例えば、0x80000000は一番小さい符号つき32ビット整数になり、0x7FFFFFFFは符号つき32ビット整数で一番大きな数になる。
例えば、0x80000000は一番小さい符号つき32ビット整数になり、0x7FFFFFFFは符号つき32ビット整数で一番大きな数になる。
215デフォルトの名無しさん
2017/07/31(月) 19:16:13.46ID:ULiYNE/a こんなに一生懸命説明してくれてるのにわからない俺…
すんませんした
すんませんした
216デフォルトの名無しさん
2017/07/31(月) 19:18:53.66ID:aK6EDhQb217片山博文MZ ◆T6xkBnTXz7B0
2017/07/31(月) 19:18:53.77ID:tXq0mJzu -30は、-1==0xFFFFFFFFよりも29だけ小さい数だ。29==16+8+4+1==0x1Dだから、-30==0xFFFFFFFF - 0x1D==0xFFFFFFE2となる。
218デフォルトの名無しさん
2017/07/31(月) 19:19:50.58ID:9Hgupd7z 意外とハマるのはサイズが拡張される場合で
char ch1 = 0xFF;
unsigned char ch2 = 0xFF;
unsigned int int1 = ch1;
unsigned int int2 = ch2;
int1 と int2 は違った値になりよるよ
VCの処理系依存かもしれんが
char ch1 = 0xFF;
unsigned char ch2 = 0xFF;
unsigned int int1 = ch1;
unsigned int int2 = ch2;
int1 と int2 は違った値になりよるよ
VCの処理系依存かもしれんが
219デフォルトの名無しさん
2017/07/31(月) 19:21:38.34ID:aK6EDhQb 1の補数、2の補数、符号ビット+仮数
言語上はこれだけある
トラップ表現があったりもする
言語上はこれだけある
トラップ表現があったりもする
220片山博文MZ ◆T6xkBnTXz7B0
2017/07/31(月) 19:37:10.30ID:tXq0mJzu 自動車やバイクには走行メーターがついているだろう。走行メーターは0〜9の何桁でどのくらい走ったかを表す。
9999の次が0000になる場合、9999を-1、9998を-2、と考えるとメーターで足し算・引き算を考えることができる。各桁が0〜9になるから、メーターの場合は10進数表示になるがね、
コンピュータの場合は2進数や、16進数で考えることが多い。
9999の次が0000になる場合、9999を-1、9998を-2、と考えるとメーターで足し算・引き算を考えることができる。各桁が0〜9になるから、メーターの場合は10進数表示になるがね、
コンピュータの場合は2進数や、16進数で考えることが多い。
221片山博文MZ ◆T6xkBnTXz7B0
2017/07/31(月) 19:41:04.34ID:tXq0mJzu 2進数の場合は各桁が0か1になり、2で次の位に繰り上げ。16進数の場合は各桁が0〜9、A〜Fのいずれかになり、16で次の位に繰り上げ。
222デフォルトの名無しさん
2017/07/31(月) 19:49:09.33ID:aK6EDhQb いつまで機種依存ネタ続けるつもり?
223デフォルトの名無しさん
2017/07/31(月) 20:01:22.25ID:iTQXcHuD224デフォルトの名無しさん
2017/07/31(月) 20:05:38.00ID:9Hgupd7z だからさわるなって
226デフォルトの名無しさん
2017/07/31(月) 21:44:09.51ID:zfEccCnj auto i = -100;
auto u = static_cast<unsigned>(i);
int i2;
std::memcpy(&i2, &u, sizeof(int));
unsigned intを経由してintを取り出す方法はこれしか思いつかなかった
auto u = static_cast<unsigned>(i);
int i2;
std::memcpy(&i2, &u, sizeof(int));
unsigned intを経由してintを取り出す方法はこれしか思いつかなかった
227デフォルトの名無しさん
2017/07/31(月) 22:53:45.79ID:SkB3nQWo 触るも何も自演だから嵐が過ぎ去るのを黙って見てるしかないぞ
228片山博文MZ ◆T6xkBnTXz7B0
2017/07/31(月) 23:31:24.17ID:tXq0mJzu 仮想世界の住人たちが全て同一人物の自演に見える病気に名前を付けるとしたら、何にする?
229片山博文MZ ◆T6xkBnTXz7B0
2017/07/31(月) 23:37:22.96ID:tXq0mJzu 「思念体同一視妄想」と名付けよう。
230はちみつ餃子 ◆8X2XSCHEME
2017/08/01(火) 00:01:32.28ID:J7NYj7Ga 思念体が滅びることはない……
死ねんたいwww
死ねんたいwww
231デフォルトの名無しさん
2017/08/01(火) 02:44:00.93ID:LRNcLEwd なるほど・・さっぱりわからん
232片山博文MZ ◆T6xkBnTXz7B0
2017/08/01(火) 21:04:49.74ID:iBC54dHR わからない
わからん
若卵
らんらんるー
わからん
若卵
らんらんるー
233デフォルトの名無しさん
2017/08/01(火) 21:55:28.88ID:J7NYj7Ga わかんない → 和姦ない → 強姦ばかり
234片山博文MZ ◆T6xkBnTXz7B0
2017/08/01(火) 22:00:50.36ID:iBC54dHR だじゃれモードかよ
235片山博文MZ ◆T6xkBnTXz7B0
2017/08/01(火) 22:05:37.08ID:iBC54dHR 2進数を下の位から4桁ごと区切ると、簡単に16進数に直せるぞ。
2の4乗は16だから、2進数の4桁が16進数の1桁に相当する。
2の4乗は16だから、2進数の4桁が16進数の1桁に相当する。
236片山博文MZ ◆T6xkBnTXz7B0
2017/08/01(火) 22:12:21.56ID:iBC54dHR #include <stdio.h>
int main(void) {
int i;
printf("10進数と16進数\n");
for (i = 0; i < 30; ++i) {
printf("%d => 0x%x\n", i, i);
}
return 0;
}
int main(void) {
int i;
printf("10進数と16進数\n");
for (i = 0; i < 30; ++i) {
printf("%d => 0x%x\n", i, i);
}
return 0;
}
237片山博文MZ ◆T6xkBnTXz7B0
2017/08/01(火) 22:15:21.90ID:iBC54dHR C/C++では、2進数出力は少し難しい。ビット演算が必要になる。
238片山博文MZ ◆T6xkBnTXz7B0
2017/08/01(火) 22:20:52.25ID:iBC54dHR void print_binary(int n) {
int i;
for (i = sizeof(int) * 8 - 1; i >= 0; --i) {
if (n & (1 << i)) putchar('1');
else putchar('0');
}
}
int i;
for (i = sizeof(int) * 8 - 1; i >= 0; --i) {
if (n & (1 << i)) putchar('1');
else putchar('0');
}
}
239片山博文MZ ◆T6xkBnTXz7B0
2017/08/01(火) 22:55:18.84ID:Oo5iWDLT #include <stdio.h>
int main(void) {
int i;
printf("符号あり => 符号なし => 16進\n");
for (i = -10; i <= 10; ++i) {
printf("%d => %u => 0x%x\n");
}
return 0;
}
int main(void) {
int i;
printf("符号あり => 符号なし => 16進\n");
for (i = -10; i <= 10; ++i) {
printf("%d => %u => 0x%x\n");
}
return 0;
}
240片山博文MZ ◆T6xkBnTXz7B0
2017/08/01(火) 22:56:59.82ID:Oo5iWDLT >>239
訂正。
#include <stdio.h>
int main(void) {
int i;
printf("符号あり => 符号なし => 16進\n");
for (i = -10; i <= 10; ++i) {
printf("%d => %u => 0x%x\n", i, i, i); //訂正。
}
return 0;
}
訂正。
#include <stdio.h>
int main(void) {
int i;
printf("符号あり => 符号なし => 16進\n");
for (i = -10; i <= 10; ++i) {
printf("%d => %u => 0x%x\n", i, i, i); //訂正。
}
return 0;
}
241デフォルトの名無しさん
2017/08/01(火) 23:06:29.76ID:mGfRGHrE >>240
%u に int 渡してんじゃねーよ
%u に int 渡してんじゃねーよ
242片山博文MZ ◆T6xkBnTXz7B0
2017/08/01(火) 23:19:17.88ID:Oo5iWDLT243片山博文MZ ◆T6xkBnTXz7B0
2017/08/01(火) 23:26:14.17ID:Oo5iWDLT244デフォルトの名無しさん
2017/08/02(水) 00:27:59.29ID:AGgV01p7246デフォルトの名無しさん
2017/08/02(水) 17:58:47.10ID:denJnq0F ぞいってなー
247デフォルトの名無しさん
2017/08/02(水) 22:14:43.24ID:TeM237FQ class CManiac {
private: char* m_pc;
public:
virtual ~CManiac() {
cout<<"destr "<< this << " : " << &m_pc << endl;
delete[] m_pc;
}
CManiac() : m_pc(new char[1]) { cout<<"constr "<< this <<endl;}
void getAdrs(){ cout<< this <<" : "<< &m_pc << endl; }
};
int main() {
vector<CManiac> vecmaniac;
vecmaniac.resize(3);
vecmaniac[0].getAdrs();
vecmaniac[1].getAdrs();
vecmaniac[2].getAdrs();
return 0;
}
constr 0x22fe40
destr 0x22fe40 : 0x22fe44
0x3b1678 : 0x3b167c
0x3b1680 : 0x3b1684
0x3b1688 : 0x3b168c
destr 0x3b1678 : 0x3b167c
destr 0x3b1680 : 0x3b1684
destr 0x3b1688 : 0x3b168c
vectorに自作クラスのインスタンスを入れるとき、このコードだとm_pc;が指すアドレスが2重開放になるとかで
デフォルトコンストラクタとコピーコンストラクタとデストラクタの3つが必須だと書いてあったのですが、エラー無しで出力できます。
デストラクタのところで<<m_pc;と書いても、何故か文字化けしてしまうのでアドレスが分からないんですが
本来、resizeを使ってインスタンスを生成したら、m_pc(new char[1])で作った領域は3つとも同じになるということですか?
あと、最初に呼び出されている0x22fe40 は何のインスタンスなんですか?回答宜しくお願いします。
private: char* m_pc;
public:
virtual ~CManiac() {
cout<<"destr "<< this << " : " << &m_pc << endl;
delete[] m_pc;
}
CManiac() : m_pc(new char[1]) { cout<<"constr "<< this <<endl;}
void getAdrs(){ cout<< this <<" : "<< &m_pc << endl; }
};
int main() {
vector<CManiac> vecmaniac;
vecmaniac.resize(3);
vecmaniac[0].getAdrs();
vecmaniac[1].getAdrs();
vecmaniac[2].getAdrs();
return 0;
}
constr 0x22fe40
destr 0x22fe40 : 0x22fe44
0x3b1678 : 0x3b167c
0x3b1680 : 0x3b1684
0x3b1688 : 0x3b168c
destr 0x3b1678 : 0x3b167c
destr 0x3b1680 : 0x3b1684
destr 0x3b1688 : 0x3b168c
vectorに自作クラスのインスタンスを入れるとき、このコードだとm_pc;が指すアドレスが2重開放になるとかで
デフォルトコンストラクタとコピーコンストラクタとデストラクタの3つが必須だと書いてあったのですが、エラー無しで出力できます。
デストラクタのところで<<m_pc;と書いても、何故か文字化けしてしまうのでアドレスが分からないんですが
本来、resizeを使ってインスタンスを生成したら、m_pc(new char[1])で作った領域は3つとも同じになるということですか?
あと、最初に呼び出されている0x22fe40 は何のインスタンスなんですか?回答宜しくお願いします。
248片山博文MZ ◆T6xkBnTXz7B0
2017/08/02(水) 22:27:48.20ID:tJX9Zx+g new char[1]は、要素数1の動的配列へのポインターで、中身は初期化されていない。
249片山博文MZ ◆T6xkBnTXz7B0
2017/08/02(水) 22:33:06.29ID:tJX9Zx+g << m_pcと書くと、当然m_pcは、C文字列として解釈されるが、初期化されておらず、ヌル終端とは限らないので、
文字化けする。
文字化けする。
250片山博文MZ ◆T6xkBnTXz7B0
2017/08/02(水) 22:35:13.01ID:tJX9Zx+g 教訓。生ポインターは使うな。std::stringやstd::vectorなどを使え。
251片山博文MZ ◆T6xkBnTXz7B0
2017/08/02(水) 22:46:24.97ID:tJX9Zx+g resizeは、引数なしのコンストラクターでオブジェクトを作成して、それをvector内部にコピーする。
このコピーの際にコピーコンストラクターが使われる。コピーコンストラクターは記述されていないから、暗黙のものが使われる。
それはポインターの中身をコピーしていないから、問題がある。
このコピーの際にコピーコンストラクターが使われる。コピーコンストラクターは記述されていないから、暗黙のものが使われる。
それはポインターの中身をコピーしていないから、問題がある。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【無言】中国怒らせた高市首相→1週間だんまり、国民に実害も説明なし 中国問題を避けてスルー… ★3 [BFU★]
- 止まらぬ「日本売り」 高市財政への懸念で進む金利上昇と円安 [蚤の市★]
- 【いちご高騰】ヤマザキのクリスマスケーキ、いちご無し販売 [おっさん友の会★]
- 【音楽】『日本レコード大賞』各賞発表! 大賞候補にILLIT、M!LK、ふるっぱー、幾田りら、アイナ、ミセスら… 作詩賞は指原莉乃 [冬月記者★]
- ネット殺到「高市総理の責任」「完全に高市リスク」「負けるな」中国が水産物輸入停止→流石に総理批判の声も「どう責任取る?」 ★10 [樽悶★]
- 【日中対立】 朝日新聞のタイトル修正が中国逆ギレの火種か SNSで批判相次ぐ [♪♪♪★]
- 中国、レアアース輸出制限wwwwwwwwwwwwwwwwwwwwwwww🎌 [329329848]
- 中国「高市が謝罪しなければ、ハニトラに引っかかった日本の政治家を公表する」 [804169411]
- 【35🌸専】なんG さくらみこ桃鉄配信実況スレ🏡【ホロライブ▶】
- 【実況】博衣こよりのえちえちカービィのエアライダー🧪★3
- 【すべてが】𝗮𝗺͜𝗮͉𝘇𝗼𝗻ブラックフライデーSALE総合【いいだろ!】 [194819832]
- 【高市速報】日本人の3割「中国への武力行使に踏み切る必要がある」ANN世論調査 [931948549]
