У меня есть следующий код, который отлично работает, за исключением того, что при удалении элемента он удаляется из родительской структуры. Мне нужна родительская структура (first_name) остаются нетронутыми со всеми элементами:удалить элементы из структуры
struct names_list {
char username[20];
struct names_list * next;
};
pthread_mutex_t name_list;
int retu = 0;
char username[20];
struct names_list * curr_name = first_name;
struct names_list * temp_name = NULL;
while(curr_name != NULL)
{
pthread_mutex_lock(&name_list);
strncpy(username, curr_name->username, sizeof(username) - 1);
pthread_mutex_unlock(&name_list);
//validate
retu = validate_name(sock,buff,sizeof(buff),username,domain);
switch (retu)
{
case 0:
pthread_mutex_lock(&name_list);
if (temp_name == NULL)
first_name = curr_name->next; //this is used for removing when current is first record
else
temp_name->next = curr_name->next; //this is used for removing current record from mid-list
free(curr_name);//Freeing should be needed
curr_name = curr_name->next;
pthread_mutex_unlock(&name_list);
break;
case 1:
pthread_mutex_lock(&name_list);
temp_name = curr_name;
curr_name = curr_name->next;
pthread_mutex_unlock(&name_list);
break;
}
if (retu == 2)
break;
}
pthread_mutex_lock(&name_list);
curr_name = first_name;
pthread_mutex_unlock(&name_list);
* Как я могу удалить элемент только из curr_name и сохранить первоначальную структуру в first_name *
'curr_name = curr_name-> next;' сразу после 'free (curr_name);' не определено поведение. Кроме того, что такое 'first_name' и что делает' validate_name'? –
validate_name возвращает 0 или 1, и это не относится к этому вопросу. моя проблема связана с структурами и как их обрабатывать, поскольку я опубликовал – ShaMora
, что именно вы подразумеваете под «сохранить исходную структуру в first_name», хотите ли вы, чтобы голова остальных элементов после удаления была указана с помощью first_name? – 75inchpianist