多重解放

new や malloc などにより動的に割り当てられたストレージは、1 回だけ解放します。

同じデータを 2 回解放するとヒープが破壊されます。これは深刻なエラーです。

ID

問題箇所

説明

1

解放サイト

ストレージが 2 回目に解放された場所。ここが、エラーの発生した場所です。

2

解放サイト

ストレージが 1 回目に解放された場所。1 回目の解放時のポインターと 2 回目の解放時のポインターは異なることがあります。これは、2 つのポインター間で代入が行われた際に発生します。

          
#include <stdlib.h>

int main(int argc, char **argv)
{
    char *p1, *p2;
    p1 = (char *)malloc(10); /* allocation site */
    p2 = p1;
    free (p1); /* deallocation site 1 */
    free (p2); /* deallocation site 2: error here */
}
        

© 2010 Intel Corporation. 無断での引用、転載を禁じます。