teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

修正

2021/03/01 01:00

投稿

ppaul
ppaul

スコア24672

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
- この、yをfreeようすると、free関数がチェックをして管理領域が壊れていることを知ます。
7
+ るいはx += 1 とか y++ やってmallocきの先頭アドレスでない状態にしてfreeを行った場合も同じエラーが出ます。
8
8
  今回起こっているのはそういう現象です。
9
- xの指す領域でサイズを超えて書き込んでいるはずですのでそれを調べてください。
9
+ xの指す領域でサイズを超えて書き込んでいるxやy更新していないかをを調べてください。