2014-01-10 3 views
0

я не могу понять, почему NULL не печатаетсяNull указатель при работе со связанным списком

#include "stdio.h" 
#include "stddef.h" 

typedef struct{ 

    int info; 
    struct DEMO1* next; 
} DEMO1; 

int main() 
{ 
    int temp; 
    DEMO1 *head ; 
    if(head==NULL) 
    printf("NULL"); 
} 
+0

Голова неинициализирована. – user1937198

+0

Магнит в нижнем положении обнаружен: 'System.ALLCAPSEXCEPTION' –

+1

@ H2CO3 Я обижаюсь на использование константы Java System для описания вопроса о языке C ... – Joel

ответ

3

Память не инициализируется при распределении. Вы не можете ожидать, что он будет иметь определенное значение, пока вы его не установите.

+0

Я думал, что после объявления оно имеет нулевое значение – io10

+0

Нет. Я не знаю, что еще сказать ... это просто не так. Он содержит случайные данные. – aardvarkk

+0

что я должен делать? – io10

1

Ваша проблема заключается в том, что вы не инициализировали указатель на любое значение. Он просто содержит все ранее сохраненные байты (если ОС не была хороша и немного очистилась). Вы должны инициализировать голову, чтобы NULL, если вы хотите, что если-заявление оценить, верно:

int main() 
{ 
    DEMO1 *head = NULL; 

    if(head==NULL) 
     printf("NULL"); 
} 
1

Реальный урок жизни здесь является то, что ваш компилятор, вероятно, имел возможность сообщить Вам, что head использовалась прежде, чем это было инициализируется. Если вы не видели такого сообщения, то либо у вас довольно плохой компилятор, либо вы не просили компилятор предупредить вас обо всех возможных проблемах. Узнайте, как получить всю помощь, которую способен предоставить ваш компилятор, и вы могли бы сэкономить много времени на программировании.

+0

Вы действительно думаете, что он или она заметили предупреждение компилятора? – valdo

+0

Следовательно, он не должен давать это предложение, которое оказывается полезным? – ShinTakezou

+0

Я скомпилировал код с помощью кодовых блоков IDE, не было предупреждений, и я не отключил предупреждения – io10

Смежные вопросы