2014-09-21 2 views
0

Спасибо всем за отзыв! Вот решение после применения исправлений.Функция работает только один раз - C

typedef struct employeeData 
{ 
    //.... 
    char* Name[20]; //Char name needed to be defined size. Or use of Malloc in the functions 
    //... 
} employee; 

Issue где добавить, прежде чем голова возвращения аварии ...

if (addEMP_ID < head->EMP_ID) 
    { 
     current->next = head; 
     head = current; //Required for this scenario 
     return current; 
    } 
+0

Примите один из ответов, который устранил вашу проблему. –

+0

они оба сделали, хотя. У меня было 2 проблемы, и каждый из них был исправлен. – user2990336

ответ

0

Один вопрос у вас есть ваша employeeData структура. Элемент Name определяется как указатель (т. Е. Не выделяется пространство, указатель на место, где выделена память), и все же вы заполняете его в своей функции add() через strcpy().

У вас есть два варианта, либо изменить определение структуры по имени, чтобы иметь фиксированный размер (например, char Name[20];), или использовать malloc() выделить пространство в add() функции, а затем зЬгср(). Например:

current->Name = malloc(strlen(addName)+1);  
strcpy(current->Name, addName); 

Вы, конечно, придется выдать free() члена Имя в вашей delete() функции.

1

Во-первых, извините за мой плохой английский.

Я заметил некоторые проблемы, здесь

if (addEMP_ID < head->EMP_ID) 
{ 
    current->next = head; 
    return current; 
} 

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

if (addEMP_ID < head->EMP_ID) 
{ 
    current->next = head; 
    head = current; 
    return current; 
} 

Я также заметил, что вы читали двойной (зарплата) в виде десятичного целого числа. А что такое porpuese temptr? Вам также НЕ НУЖНО БЫТЬ МОЛЛОМ!

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