Как free () сразу же после присваивания NULL может привести к зависанию указателя? - PullRequest
2 голосов
/ 26 апреля 2010

Как приведенный ниже код может привести к зависанию указателя.

{
    char *cPointer = malloc ( some constant number );
    /* some code */
    free ( cPointer );      
    cPointer = NULL;        
    /* some code */
}

Ответы [ 2 ]

14 голосов
/ 26 апреля 2010

Это не может.

Это будет:

char * a = malloc(556);
char * b = a;
free(a);
a = NULL;

b теперь висячий указатель, потому что объект, на который он указывал, исчез, но bвсе еще сохраняет адрес в памяти, где был объект, вы получаете забавные результаты, когда пытаетесь получить к нему доступ - это зависит от того, была ли память повторно использована или нетронута.

3 голосов
/ 26 апреля 2010

Если первый «некоторый код» копирует значение указателя из cPointer в какую-либо другую переменную указателя, а второй «некоторый код» использует эту другую переменную указателя, это приведет к проблемам.

Если первый «некоторый код» генерирует исключение, так что свободное никогда не достигается, это приведет к утечке памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...