解放されたストレージの参照

解放されたメモリーにアクセスしています。

これは深刻なエラーです。アクセスしたストレージは再利用されている可能性があります。そのため、予期できない値が読み取られたり、書き込みによって別の変数やヒープ全体の異常を引き起こすことがあります。これは、"古いポインター" エラーとも呼ばれ、ポインターが無効または古くなった後に使用されたことを示します。

ID

問題箇所

説明

1

不正なメモリーアクセス

メモリーがアクセスされた場所

          
#include <stdio.h>

int main(int argc, char **argv)
{
    int *p, *q;
    p = (int *)malloc(4);
    *p = 1;
    free(p);
    q = (int *)malloc(4);
    *q = 2;
    *p = 3; // error here: can't use p after it was freed
    printf("*q = %d\n", *q); // Will this print "q = 2" or "q = 3"?
}
        

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