С манжеты, ваша первая функция, вы можете захотеть передать указатель на голову в качестве аргумента функции или иметь возвращаемое значение в виде узла *, чтобы она была более универсальной. Ни head, ни temp не были инициализированы, что происходит тремя способами: вы присваиваете указатель существующему адресу переменной, вы делаете вызов malloc для назначения хранилища, и третьим способом, который я не помню, ознакомьтесь с ресурсами ниже. Они помогут! Вы выделили переменную-указатель, объявив локальный и глобальный узел *, они совместимы, однако вы не инициализировали ни одну из них со ссылкой на другую переменную;Вы просто объявили их. Указатель должен быть инициализирован с присвоением ссылки на другой адрес либо из malloc, & addressof и т. Д. Null просто помечает их как плохие указатели, не бросая сегфофт при тестировании. Думайте об этом как об имени файла без выделенного хранилища ... Вы не можете сохранить его, но оно там. Поскольку ни одна из них не инициализирована, при попытке назначить их вы получаете ошибку памяти, потому что ни одно хранилище еще не было выделено. Что значит ... сегфо! Поверхностно существует три компонента указателя: [Адрес указателя для псевдонима / именованной области памяти / объекта | блок памяти, зарезервированный для хранения любого размера, который вы объявляете, который вам необходим, в этом случае вы оставляете его таким, как таковой: head = malloc (sizeof (struct node *)), это, скорее всего, выделяет 8-байтовое адресное пространство, которое указывает подходящую область памяти-> | * разыменованное значение адреса, на который ссылается хранилище] Попробуйте запустить gdb и установить разрыв для каждого издва указателя в вашей первой функции. Я надеюсь, что это помогает, и надеюсь, что я не дал вам плохих советов ...
Я слишком много боролся с этим, вот несколько хороших ресурсов, которые будут стоить вашего времени:
Библиотека Stanfor CS -CONCISELY охватывает указатели, связанные списки, двоичные деревья, отладку, чтобы точно определить, какая строка кода генерирует вашу ошибку;http://cslibrary.stanford.edu/