2016-11-18 4 views
1

, когда я пытаюсь добавить новый узел в мой связанный список, компилятор перестает работать и не может добавить узел, я не могу выяснить, есть ли проблема в логика или в синтаксиседобавить новый узел в существующий связанный список в c

struct Record* CreateNode() 
{ 
struct Record* PointerToRecord ; 
PointerToRecord = (struct Record*) malloc(sizeof(struct Record*)); 
if(PointerToRecord) 
{ 
    PointerToRecord -> C = FillDataOfContacts(); 
    PointerToRecord -> Next = NULL; 
    PointerToRecord -> Prev = NULL; 
} 
return PointerToRecord ; 
} 

struct Record* AddNode() 
{ 
if (Head == NULL && Tile == NULL) 
{ 
    Head = Tile = CreateNode(); 
} 
else 
{ 
    struct Record* Pointer ; 
    Pointer = CreateNode(); 
    Tile -> Next = Pointer ; 
    Pointer -> Prev = Tile ; 
    Pointer -> Next = NULL; 
    Tile = Pointer ; 
} 
} 
+0

вы должны показать сообщения об ошибках, говоря, что «компилятор перестает работать» не полезен – pm100

+0

вот что такое в итоге случилось! кодовые блоки перестают работать, они случайно закрыты! – AlameerAshraf

+0

@AlameerAshraf Пожалуйста, добавьте [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve), а также прочитайте о [как отлаживать небольшие программы] (http://ericlippert.com/ 2014/03/05/как к отладке мал-программа /). –

ответ

3

в вашей struct Record* CreateNode() функции, у вас есть:

PointerToRecord = (struct Record*) malloc(sizeof(struct Record*)); 

Здесь вы не назначая достаточно памяти для хранения struct record вместо этого вы назначаете память для хранения struct record*

пытаются назначая таким образом:

PointerToRecord = (struct Record*) malloc(sizeof(struct Record)); 

Кроме того, вам не нужно отбрасывать возвращаемое значение таНос: Here's why(нажмите)

так что вы можете выделить указатель следующим образом

PointerToRecord = malloc(sizeof(struct Record)); 
Смежные вопросы