Проблема в вашем коде:
*p = NULL;
Таким образом, вы разыменовываете p
и записываете значение NULL
в a
, что неправильно в вашем случае. NULL
предназначен для присвоения или сравнения с указателями , а не с объектом, на который указывает указатель (если только объект ссылки, здесь a
, также не будет указателем - ( указатель на указатель )).
Решение:
Необходимо опустить оператор разыменования (*
):
p = NULL;
для присвойте NULL
p
, а не a
.
Исправленный код ( Пример в сети ):
#include <stdio.h>
int main (void)
{
int a = 5;
int* p = &a; //pointer "p" now points to "a"
int* q;
q = p; //pointer "q" points to "a" as well
p = NULL; //pointer "p" points to NULL
printf("*q = %d\n", *q);
printf("p = %p", (void*)p);
}
Выход:
*q = 5
p = (nil)