回答編集履歴

1

コメントを追加

2020/12/16 08:14

投稿

akiruno-oneone
akiruno-oneone

スコア815

test CHANGED
@@ -7,3 +7,35 @@
7
7
 
8
8
 
9
9
  このserializationではメモリ破壊が起こってしまいます。
10
+
11
+
12
+
13
+ 0. std::stringのサイズは保持する文字列のサイズと関係ありません。
14
+
15
+   stringクラスの実装によりことなります。
16
+
17
+   私の環境では、sizeofでstd::stringのサイズを出力すると32バイトです。
18
+
19
+ 0. 無理やり、charへのポインタ(newしたメモリ領域)をstd::stringへのポインタとしてキャストしていますが、無理があります。
20
+
21
+ 以下の命令では、s1の内容が*p_s1にコピーされるわけではありません。
22
+
23
+ std::stringクラスの代入演算子が実行されます。
24
+
25
+ ```c++
26
+
27
+ *p_s1 = s1;
28
+
29
+ ```
30
+
31
+ 上記のコードでは、
32
+
33
+ 0. *p_s1にすでに文字列が入っていれば、この文字列の領域を解放
34
+
35
+ 0. s1が保持している文字列コピー
36
+
37
+
38
+
39
+ のような、動作になると考えますが、しかし、p_s1は元々、charへのポインタであり、std::stringオブジェクトではないため、動作が不定です。
40
+
41
+ 実際、私の環境ではSegmentation faultが発生しまともに動作しません。