В display
и в других местах у вас есть
if (tmp = NULL)
Это явно неверно, поскольку присваивает NULL
tmp
, делая его похожим на список нулевой длины.
КогдаЯ скомпилировал вашу программу (используя clang) и получил следующий вывод:
jeremyp@Magenta:jeremyp% cc foo.c
foo.c:75:13: warning: using the result of an assignment as a condition without
parentheses [-Wparentheses]
if (tmp = NULL)
~~~~^~~~~~
foo.c:75:13: note: place parentheses around the assignment to silence this
warning
if (tmp = NULL)
^
( )
foo.c:75:13: note: use '==' to turn this assignment into an equality comparison
if (tmp = NULL)
^
==
foo.c:96:13: warning: using the result of an assignment as a condition without
parentheses [-Wparentheses]
if (tmp = NULL)
~~~~^~~~~~
foo.c:96:13: note: place parentheses around the assignment to silence this
warning
if (tmp = NULL)
^
( )
foo.c:96:13: note: use '==' to turn this assignment into an equality comparison
if (tmp = NULL)
^
==
foo.c:116:13: warning: using the result of an assignment as a condition without
parentheses [-Wparentheses]
if (tmp = NULL)
~~~~^~~~~~
foo.c:116:13: note: place parentheses around the assignment to silence this
warning
if (tmp = NULL)
^
( )
foo.c:116:13: note: use '==' to turn this assignment into an equality comparison
if (tmp = NULL)
^
==
3 warnings generated.
Вероятно, вы используете либо clang, либо gcc, оба из которых будут отображать предупреждения, похожие на приведенные выше.Мой совет: не игнорируйте предупреждения, даже если испускается исполняемый файл .
Если ваш компилятор не выдает предупреждения по коду в вашем вопросе (даже с переключателем -Wall
), выбрось это и получи лучше.У меня есть многолетний опыт, когда я узнаю, что игнорирование предупреждений вызывает много дополнительной работы и приводит к разочарованию.
Если вы используете Visual Studio (не повезло!), У него также есть предупреждение для этого.Очевидно, это предупреждение уровня 4 , поэтому вам нужен переключатель /W4
.У меня нет доступа к Visual Studio, поэтому, к сожалению, я не могу это проверить.