- 1 名前:デフォルトの名無しさん mailto:sage [2017/07/18(火) 07:07:27.20 ID:vzMDiUgd.net]
- エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。 ◆ソースのインデントについて 半角空白やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのも手ですが直接貼る場合は、 全角空白か に置換すると見栄えだけはよくなります。 【アップローダー】(質問が長い時はココ使うと便利) codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック) ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用) 前スレ 【初心者歓迎】C/C++室 Ver.100【環境依存OK】 mevius.2ch.net/test/read.cgi/tech/1478440682/
- 159 名前:デフォルトの名無しさん mailto:sage [2017/07/29(土) 13:01:38.77 ID:MwwfsD4U.net]
- >>146
なぜ?その理由は? 書くならそこまで書けよ無能
- 160 名前:デフォルトの名無しさん mailto:sage [2017/07/29(土) 13:20:13.10 ID:FYOlqRfm.net]
- >>157
わけわかんないオレオレコードより、テスト済みの標準ライブラリ関数のほうが信頼できるから
- 161 名前:デフォルトの名無しさん mailto:sage [2017/07/29(土) 13:24:20.64 ID:14mINgXT.net]
- 安易にライブラリを使うから、パフォーマンスがどんどん悪くなるんだな
- 162 名前:デフォルトの名無しさん mailto:sage [2017/07/29(土) 13:47:21.71 ID:E5EEKRTu.net]
- >>155
自分の知識目一杯使って的はずれなマウンティングしてる奴がいるだけ w
- 163 名前:デフォルトの名無しさん mailto:sage [2017/07/29(土) 15:25:53.36 ID:wF9WnZrE.net]
- あと、自分がコメントできそうな話題になるとここぞとばかりに知識を披露しようとして、
主題からずれたことを言い出したり、 さらにそれに間違いがあって余計なツッコミや攻撃的コメントを呼び込むのも よく見る風景。
- 164 名前:デフォルトの名無しさん mailto:sage [2017/07/29(土) 15:47:58.67 ID:0zBFZ9bK.net]
- さほど広い範囲を読んでるわけじゃないけど、
C++関連は特に殺伐としてる感じはあるな。
- 165 名前:デフォルトの名無しさん mailto:sage [2017/07/29(土) 15:56:27.65 ID:gp3BUyJn.net]
- >>160 ←こういうのもマウンティングだよな。
- 166 名前:デフォルトの名無しさん [2017/07/29(土) 16:15:28.13 ID:mj0H/MXI.net]
- >>159
まずは意図が伝わるようにと言う意味でシンプルに書くことが重要。 標準ライブラリ使用は最低限のマナー。 チーム開発してると、上記を踏まえずオレオレ判断でパフォーマンスガー言っている人が、一番迷惑なんだよね。
- 167 名前:デフォルトの名無しさん mailto:sage [2017/07/29(土) 16:53:05.23 ID:V9CC1YIs.net]
- 仕事だとメモリ効率や実効速度より開発効率が優先されるからな
- 168 名前:デフォルトの名無しさん mailto:sage [2017/07/29(土) 16:56:37.35 ID:USfv5Coy.net]
- パフォーマンスどうこうで、標準ライブラリ使わなくても許されるのは、mkl開発チームとか、eigenのコミッターレベル
- 169 名前:デフォルトの名無しさん mailto:sage [2017/07/29(土) 17:01:43.15 ID:E0esoNX5.net]
- >>164
>まずは意図が伝わるように ならお前、>>133が何してるか説明出来るんだよな?
- 170 名前:デフォルトの名無しさん mailto:sage [2017/07/29(土) 17:07:45.04 ID:zJVnUUbX.net]
- >>163
鏡見た方がいいと思うよ w
- 171 名前:デフォルトの名無しさん mailto:sage [2017/07/29(土) 17:18:24.12 ID:WkR4K9lF.net]
- >>167
>>133はすげーわかりやすいだろ
- 172 名前:デフォルトの名無しさん [2017/07/29(土) 17:19:42.35 ID:mj0H/MXI.net]
- >>167
それが元ネタかー! すみませんでした _orz 無理っていうか、>>143でおk
- 173 名前:派ですw []
- [ここ壊れてます]
- 174 名前:デフォルトの名無しさん [2017/07/29(土) 17:20:19.90 ID:mj0H/MXI.net]
- てか、パフォーマンス関係ねー
- 175 名前:デフォルトの名無しさん mailto:sage [2017/07/29(土) 17:24:23.71 ID:E0esoNX5.net]
- >>169
答えられないから回答を逸らすんですねわかります まさか「あるvalueを持つpairだけを別のmapに移す」なんて言わないことを祈る
- 176 名前:デフォルトの名無しさん [2017/07/29(土) 17:26:24.48 ID:mj0H/MXI.net]
- ん?
でも、よく見たら>>133割りとわかりやすいじゃん? 今、スマホの小さい画面で改行が多いから面食らったけど、2行(かな?)でみれば、とてもシンプルで意図も読み取れるわ。
- 177 名前:デフォルトの名無しさん [2017/07/29(土) 17:30:02.48 ID:mj0H/MXI.net]
- ちょっとテンパったけど、そのレベルなら正直どっちでも構わないな。
コメントがあれば。
- 178 名前:デフォルトの名無しさん mailto:sage [2017/07/29(土) 17:50:22.46 ID:E0esoNX5.net]
- >>144
どう見ても>>133の方が酷いお題改変なのだが それをさしおいて>>143に指摘とはこれ如何に
- 179 名前:デフォルトの名無しさん mailto:sage [2017/07/29(土) 17:53:27.93 ID:14mINgXT.net]
- >>165
どうでも良いことにこだわってるあたり、 開発スピードが速いようには見えないなあ
- 180 名前:デフォルトの名無しさん [2017/07/29(土) 21:53:58.73 ID:JdwUdvlQ.net]
- >>127
亀だがバイナリ書き込みは後で読み込むときに構造情報が欠けてることが多いからできれば避けたほうがいい abcde が可変長になりそうなところとかな
- 181 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2017/07/29(土) 23:46:27.56 ID:HavpCAcr.net]
- 個人的には BENCODE がなかなかいいんじゃないかと思ってる。
- 182 名前:デフォルトの名無しさん mailto:sage [2017/07/30(日) 12:35:48.46 ID:GR0hOB2I.net]
- >>177
>バイナリ書き込みは後で読み込むときに構造情報が欠けてることが多い 欠けているのは>>177の知能だろ
- 183 名前:デフォルトの名無しさん [2017/07/30(日) 17:25:43.33 ID:w5RmXCUD.net]
- 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 を指定する意味はなんなんでしょうか?
- 184 名前: ◆QZaw55cn4c mailto:sage [2017/07/30(日) 18:36:26.80 ID:wjBL4Xoh.net]
- >>180
codepad.org/kjSkQNMa これが望みの解かどうかはわからないが
- 185 名前:デフォルトの名無しさん mailto:sage [2017/07/30(日) 18:49:49.76 ID:xziOu8cb.net]
- >>181
なんでcoutでintにキャストしてんの
- 186 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/07/30(日) 18:54:45.98 ID:aW4ocSFO.net]
- >>180
MultiFuncを作った人にきけば?
- 187 名前:デフォルトの名無しさん mailto:sage [2017/07/30(日) 18:57:01.02 ID:wjBL4Xoh.net]
- >>182
>>180 に聞いて
- 188 名前:デフォルトの名無しさん [2017/07/30(日) 20:43:43.49 ID:w5RmXCUD.net]
- >>181
ありがとうございます。コンバイラかバージョンの問題ですかね。 >>182 www7b.biglobe.ne.jp/~robe/cpphtml/index.html ここで勉強してたら出てきたんですが、完全には書いてること理解できてないんで何でかはわかりません。
- 189 名前:デフォルトの名無しさん mailto:sage [2017/07/30(日) 20:54:24.26 ID:1HGPNMYb.net]
- >>180
cout時にintにcastしているからでは?
- 190 名前:デフォルトの名無しさん mailto:sage [2017/07/30(日) 21:21:54.63 ID:wjBL4Xoh.net]
- >>185
よく見てくれ,cout << (int)x の (int) のキャストが問題となっている,なぜ (int) のキャストをしているのかは読み取れないが
- 191 名前:デフォルトの名無しさん mailto:sage [2017/07/30(日) 21:40:38.31 ID:K4rJr1Oo.net]
- >なぜ (int) のキャストをしているのかは読み取れないが
ふむふむ、これがイケヌマと言う奴だな
- 192 名前:デフォルトの名無しさん mailto:sage [2017/07/30(日) 21:42:16.93 ID:IhAKIxVt.net]
- オマエ読み取れたの?
- 193 名前:デフォルトの名無しさん mailto:sage [2017/07/30(日) 21:46:15.66 ID:K4rJr1Oo.net]
- これが読み取れない者はC/C++より国語の勉強をした方がよいのではないか
- 194 名前:デフォルトの名無しさん mailto:sage [2017/07/30(日) 21:49:30.37 ID:9ZftmVJd.net]
- 業務ではよくあるよ
- 195 名前:。
バグか仕様か分らないっての。書いた本人は既にいなくて誰も答えを知らない。 [] - [ここ壊れてます]
- 196 名前:デフォルトの名無しさん mailto:sage [2017/07/30(日) 22:21:43.69 ID:pLyoXQEm.net]
- どこの業務だよ。仕様残せよ
- 197 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/07/30(日) 22:28:24.05 ID:aW4ocSFO.net]
- 型消し、type eraserだから、データ構造に意味が無ければ、悪い設計だろう。
- 198 名前:デフォルトの名無しさん mailto:sage [2017/07/30(日) 22:31:00.66 ID:ynobldaf.net]
- >>190
で、なぜキャストしてるの? 読み取れた結果を披露してちょ
- 199 名前:デフォルトの名無しさん mailto:sage [2017/07/30(日) 22:31:49.27 ID:K4rJr1Oo.net]
- >type eraser
まさか、type erasureのつもりだった!?
- 200 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/07/30(日) 22:37:32.57 ID:aW4ocSFO.net]
- >>195
間違えました。すみません。
- 201 名前:デフォルトの名無しさん mailto:sage [2017/07/30(日) 22:38:07.55 ID:K4rJr1Oo.net]
- >>194
パラメーターの型は適当に決めたもので、EMFTypeで指定されたint型で取り出すのが目的だからだろう 「いろいろなデータを1つの関数で表示します」と書かれているのだから イメージは↓ https://wandbox.org/permlink/WhWaxSM5nHZdAj9n
- 202 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/07/30(日) 22:42:59.84 ID:aW4ocSFO.net]
- そのインターフェース、なんか意味があるの?
- 203 名前:デフォルトの名無しさん mailto:sage [2017/07/30(日) 22:49:59.18 ID:hW0bjdhb.net]
- type erasureは意味違うけどね
- 204 名前:デフォルトの名無しさん mailto:sage [2017/07/30(日) 23:12:02.27 ID:K4rJr1Oo.net]
- これはきっとロベールさんが知恵を絞って考えた、徐々に発展していく例題だったに違いない
と思って調べたら単なる型変換の説明だった
- 205 名前:デフォルトの名無しさん [2017/07/30(日) 23:35:50.02 ID:w5RmXCUD.net]
- >>187
すいません、よく見てませんでした。 unsigned intでひっくりかえった値はintでキャストしなおすと元に戻るんですね。勉強になります。
- 206 名前:デフォルトの名無しさん mailto:sage [2017/07/31(月) 00:05:24.36 ID:rlOfWFsH.net]
- int ⇔ unsigned intだからそれ程でもないけど
たかが型変換と思って単純そうに見えて実は深い
- 207 名前:デフォルトの名無しさん mailto:sage [2017/07/31(月) 04:51:20.26 ID:eXoHYgix.net]
- もしかしてunsigned int a = -10が10だと思ってるじゃ
- 208 名前:デフォルトの名無しさん mailto:sage [2017/07/31(月) 07:41:44.42 ID:2pZH8HVB.net]
- >>184
ごめんアンカミスだ
- 209 名前:デフォルトの名無しさん mailto:sage [2017/07/31(月) 08:13:27.51 ID:QJrBCtHy.net]
- unsigned intとintの変換って戻る保証あったっけ?
教えてエロい人
- 210 名前:デフォルトの名無しさん mailto:sage [2017/07/31(月) 09:37:11.53 ID:8MdXXwK/.net]
- ない
- 211 名前:デフォルトの名無しさん mailto:sage [2017/07/31(月) 10:27:16.23 ID:b0IxVlKH.net]
- そうなの?
補数表現が違うと戻らなくなるんだっけ?
- 212 名前:デフォルトの名無しさん mailto:sage [2017/07/31(月) 12:46:28.35 ID:oDbItPw6.net]
- いつもの
・現実にはダメな処理系はない けど ・仕様では保証されない って奴じゃね?
- 213 名前:デフォルトの名無しさん mailto:sage [2017/07/31(月) 17:41:18.97 ID:ULiYNE/a.net]
- この速さなら言える
unsigned intが分からない 少なくともunsignedの-10が10じゃないことは分かった
- 214 名前:デフォルトの名無しさん mailto:sage [2017/07/31(月) 17:52:47.90 ID:4+hbusvk.net]
- 俺もunsignedに負数を代入した場合
どーなるのかわかってなかったわ つーか、そんな処理入れる機会なくね? わざわざバグったコード書いて どうなるんですかって聞いているようなもん
- 215 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/07/31(月) 18:12:00.47 ID:tXq0mJzu.net]
- intが32ビットの整数と仮定すると、
-1==0xFFFFFFFF。 これに1を足すと、オーバーフローして 0==0x00000000 となる。 -2は-1==0xFFFFFFFFよりも1だけ小さいので0xFFFFFFFEだ。
- 216 名前:デフォルトの名無しさん mailto:sage [2017/07/31(月) 18:19:04.62 ID:RCGkVO1K.net]
- 処理系依存な内容とそうじゃない内容はちゃんと区別しよう
- 217 名前:デフォルトの名無しさん mailto:sage [2017/07/31(月) 18:23:58.10 ID:2pZH8HVB.net]
- >>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になる
- 218 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/07/31(月) 19:07:02.18 ID:tXq0mJzu.net]
- 符号つき(signed)の値の場合、一番上のビット(最上位ビット)を符号として扱う。そういう決まりになっている。
例えば、0x80000000は一番小さい符号つき32ビット整数になり、0x7FFFFFFFは符号つき32ビット整数で一番大きな数になる。
- 219 名前:デフォルトの名無しさん mailto:sage [2017/07/31(月) 19:16:13.46 ID:ULiYNE/a.net]
- こんなに一生懸命説明してくれてるのにわからない俺…
すんませんした
- 220 名前:デフォルトの名無しさん mailto:sage [2017/07/31(月) 19:18:53.66 ID:aK6EDhQb.net]
- >>214
そんな事は決まってない そういう処理系が多いってだけ
- 221 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/07/31(月) 19:18:53.77 ID:tXq0mJzu.net]
- -30は、-1==0xFFFFFFFFよりも29だけ小さい数だ。29==16+8+4+1==0x1Dだから、-30==0xFFFFFFFF - 0x1D==0xFFFFFFE2となる。
- 222 名前:デフォルトの名無しさん mailto:sage [2017/07/31(月) 19:19:50.58 ID:9Hgupd7z.net]
- 意外とハマるのはサイズが拡張される場合で
char ch1 = 0xFF; unsigned char ch2 = 0xFF; unsigned int int1 = ch1; unsigned int int2 = ch2; int1 と int2 は違った値になりよるよ VCの処理系依存かもしれんが
- 223 名前:デフォルトの名無しさん mailto:sage [2017/07/31(月) 19:21:38.34 ID:aK6EDhQb.net]
- 1の補数、2の補数、符号ビット+仮数
言語上はこれだけある トラップ表現があったりもする
- 224 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/07/31(月) 19:37:10.30 ID:tXq0mJzu.net]
- 自動車やバイクには走行メーターがついているだろう。走行メーターは0〜9の何桁でどのくらい走ったかを表す。
9999の次が0000になる場合、9999を-1、9998を-2、と考えるとメーターで足し算・引き算を考えることができる。各桁が0〜9になるから、メーターの場合は10進数表示になるがね、 コンピュータの場合は2進数や、16進数で考えることが多い。
- 225 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/07/31(月) 19:41:04.34 ID:tXq0mJzu.net]
- 2進数の場合は各桁が0か1になり、2で次の位に繰り上げ。16進数の場合は各桁が0〜9、A〜Fのいずれかになり、16で次の位に繰り上げ。
- 226 名前:デフォルトの名無しさん mailto:sage [2017/07/31(月) 19:49:09.33 ID:aK6EDhQb.net]
- いつまで機種依存ネタ続けるつもり?
- 227 名前:デフォルトの名無しさん mailto:sage [2017/07/31(月) 20:01:22.25 ID:iTQXcHuD.net]
- >>220
それは10の補数で負数を表す場合でしょ そういうアーキテクチャもあるだろうけど、それ以外がありえないわけじゃない
- 228 名前:デフォルトの名無しさん mailto:sage [2017/07/31(月) 20:05:38.00 ID:9Hgupd7z.net]
- だからさわるなって
- 229 名前: mailto:sage [2017/07/31(月) 21:11:41.06 ID:VQaCNCGS.net]
- 1の補数表現ですか,教科書には堂々と載るんですけど,実際には見たことないね‥
- 230 名前:デフォルトの名無しさん mailto:sage [2017/07/31(月) 21:44:09.51 ID:zfEccCnj.net]
- auto i = -100;
auto u = static_cast<unsigned>(i); int i2; std::memcpy(&i2, &u, sizeof(int)); unsigned intを経由してintを取り出す方法はこれしか思いつかなかった
- 231 名前:デフォルトの名無しさん mailto:sage [2017/07/31(月) 22:53:45.79 ID:SkB3nQWo.net]
- 触るも何も自演だから嵐が過ぎ去るのを黙って見てるしかないぞ
- 232 名前:片山博文MZ mailto:sage [2017/07/31(月) 23:31:24.17 ID:tXq0mJzu.net]
- 仮想世界の住人たちが全て同一人物の自演に見える病気に名前を付けるとしたら、何にする?
- 233 名前:片山博文MZ mailto:sage [2017/07/31(月) 23:37:22.96 ID:tXq0mJzu.net]
- 「思念体同一視妄想」と名付けよう。
- 234 名前:はちみつ餃子 mailto:sage [2017/08/01(火) 00:01:32.28 ID:J7NYj7Ga.net]
- 思念体が滅びることはない……
死ねんたいwww
- 235 名前:デフォルトの名無しさん mailto:sage [2017/08/01(火) 02:44:00.93 ID:LRNcLEwd.net]
- なるほど・・さっぱりわからん
- 236 名前:片山博文MZ mailto:sage [2017/08/01(火) 21:04:49.74 ID:iBC54dHR.net]
- わからない
わからん 若卵 らんらんるー
- 237 名前:デフォルトの名無しさん mailto:sage [2017/08/01(火) 21:55:28.88 ID:J7NYj7Ga.net]
- わかんない → 和姦ない → 強姦ばかり
- 238 名前:片山博文MZ mailto:sage [2017/08/01(火) 22:00:50.36 ID:iBC54dHR.net]
- だじゃれモードかよ
- 239 名前:片山博文MZ mailto:sage [2017/08/01(火) 22:05:37.08 ID:iBC54dHR.net]
- 2進数を下の位から4桁ごと区切ると、簡単に16進数に直せるぞ。
2の4乗は16だから、2進数の4桁が16進数の1桁に相当する。
- 240 名前:片山博文MZ mailto:sage [2017/08/01(火) 22:12:21.56 ID:iBC54dHR.net]
- #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; }
- 241 名前:片山博文MZ mailto:sage [2017/08/01(火) 22:15:21.90 ID:iBC54dHR.net]
- C/C++では、2進数出力は少し難しい。ビット演算が必要になる。
- 242 名前:片山博文MZ mailto:sage [2017/08/01(火) 22:20:52.25 ID:iBC54dHR.net]
- 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'); } }
- 243 名前:片山博文MZ mailto:sage [2017/08/01(火) 22:55:18.84 ID:Oo5iWDLT.net]
- #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; }
- 244 名前:片山博文MZ mailto:sage [2017/08/01(火) 22:56:59.82 ID:Oo5iWDLT.net]
- >>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; }
- 245 名前:デフォルトの名無しさん mailto:sage [2017/08/01(火) 23:06:29.76 ID:mGfRGHrE.net]
- >>240
%u に int 渡してんじゃねーよ
- 246 名前:片山博文MZ mailto:sage [2017/08/01(火) 23:19:17.88 ID:Oo5iWDLT.net]
- >>238
www.wdic.org/w/TECH/CHAR_BIT
- 247 名前:片山博文MZ mailto:sage [2017/08/01(火) 23:26:14.17 ID:Oo5iWDLT.net]
- %huなんて知らなかったなあ。
https://stackoverflow.com/questions/8699812/what-is-the-format-specifier-for-unsigned-short-int
- 248 名前:デフォルトの名無しさん mailto:sage [2017/08/02(水) 00:27:59.29 ID:AGgV01p7.net]
- >>238
C++のときはstd::bitsetも使えるぞい https://cpprefjp.github.io/reference/bitset/to_string.html
- 249 名前:片山博文MZ mailto:sage [2017/08/02(水) 00:33:11.36 ID:hTaTWBJY.net]
- >>244
情報ありがとう。
- 250 名前:デフォルトの名無しさん mailto:sage [2017/08/02(水) 17:58:47.10 ID:denJnq0F.net]
- ぞいってなー
- 251 名前:デフォルトの名無しさん [2017/08/02(水) 22:14:43.24 ID:TeM237FQ.net]
- 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 は何のインスタンスなんですか?回答宜しくお願いします。
- 252 名前:片山博文MZ mailto:sage [2017/08/02(水) 22:27:48.20 ID:tJX9Zx+g.net]
- new char[1]は、要素数1の動的配列へのポインターで、中身は初期化されていない。
- 253 名前:片山博文MZ mailto:sage [2017/08/02(水) 22:33:06.29 ID:tJX9Zx+g.net]
- << m_pcと書くと、当然m_pcは、C文字列として解釈されるが、初期化されておらず、ヌル終端とは限らないので、
文字化けする。
- 254 名前:片山博文MZ mailto:sage [2017/08/02(水) 22:35:13.01 ID:tJX9Zx+g.net]
- 教訓。生ポインターは使うな。std::stringやstd::vectorなどを使え。
- 255 名前:片山博文MZ mailto:sage [2017/08/02(水) 22:46:24.97 ID:tJX9Zx+g.net]
- resizeは、引数なしのコンストラクターでオブジェクトを作成して、それをvector内部にコピーする。
このコピーの際にコピーコンストラクターが使われ
- 256 名前:る。コピーコンストラクターは記述されていないから、暗黙のものが使われる。
それはポインターの中身をコピーしていないから、問題がある。 [] - [ここ壊れてます]
- 257 名前:片山博文MZ mailto:sage [2017/08/02(水) 22:57:09.01 ID:tJX9Zx+g.net]
- よくわからなければ、
CManiac(const CManiac& cm) { ... } というコピーコンストラクターを書き加えてみるとよい。
- 258 名前:片山博文MZ mailto:sage [2017/08/02(水) 22:59:09.90 ID:tJX9Zx+g.net]
- 代入の
CManiac& operater=(const CManiac& cm) { ... return *this; } も追加。
- 259 名前:デフォルトの名無しさん mailto:sage [2017/08/02(水) 23:05:54.19 ID:qrhQzK+m.net]
- unsigned intなどを使って何かいい事有るのか?普通にint使えばいいだろ?
|

|