回答編集履歴
1
修正
answer
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
freeが解放するメモリの大きさを指定しなくてよいのは、mallocが返すメモリへのポインタの手前の管理領域に割り当てたメモリの大きさを持っているからです。
|
4
4
|
|
5
5
|
多くの場合、メモリ破壊は領域外アクセス(SIGSEGV)になることが多いのですが、それ以外のエラーになる場合もあります。
|
6
|
-
それは、続けてmalloc等で取った領域、xとyがあり、xを配列などとして使って取ったメモリを超えて書き込んで、yの管理領域を上書きしてしまいうエラーです。
|
6
|
+
それは、続けてmalloc等で取った領域、xとyがあり、xを配列などとして使って取ったメモリを超えて書き込んで、yの管理領域を上書きしてしまいうエラーです。このあと、yをfreeしようとすると、free関数がチェックをして管理領域が壊れていることを知らせます。
|
7
|
-
|
7
|
+
あるいは、x += 1 とか y++ をやってmallocしたときの先頭アドレスでない状態にしてからfreeを行った場合も同じエラーが出ます。
|
8
8
|
今回起こっているのはそういう現象です。
|
9
|
-
xの指す領域で
|
9
|
+
xの指す領域でサイズを超えて書き込んでいるか、xやyを更新していないかをを調べてください。
|