メモリに関するhotan666のブックマーク (2)

  • メモリの二重解放回避テク - akihiko’s tech note

    メモリの二重解放とは, new などで確保したメモリ領域(ヒープ領域)を2回 delete などで解放することを言う. new と delete をきちんと対応させて書いていないときに起こる問題だ.特にクラスのメンバに動的確保したメモリへのポインタを含む場合にやってしまいがちである.ここでは二重解放によって発生する問題を解説する. 結論から言うと,メモリを解放した後 (delete p1;),ほかの用途でメモリを確保し (p2=new T;),たまたまそれが解放したメモリと同じアドレスに割り当てられてしまった場合 (p1==p2),最初のメモリを二重解放すると (delete p1;),新しく確保したメモリ (p2) が解放されてしまう.この結果,新しく確保したメモリにアクセスすると値が書き換えられていたり,セグメンテーションフォルトが発生する場合がある.プログラマはまず,新しく確保したメ

    メモリの二重解放回避テク - akihiko’s tech note
  • 無為空間 |MALLOC_CHECK_

    無為空間 むいむい(´ω`*) Entries MALLOC_CHECK_ タグ: C++ gcc gccでコンパイルしたプログラムを実行していたら、 qsort の中の malloc でセグメンテーション違反が発生した。 Program received signal SIGSEGV, Segmentation fault. [Switching to Thread -1275348048 (LWP 18592)] 0x006ca560 in malloc_consolidate () from /lib/tls/libc.so.6 どうもどこかで「二重解放」が行われている様な雰囲気なのだが……全て自分のコードならともかく、色んな人が色んな思想で組み立てたコードのため、当たりを付けるのが非常に困難。 ああ、何か簡単に二重解放している箇所を見つけるツールはないものか……と検索してみたらあっ

  • 1