2013-05-06 2 views
-1

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

До сих пор я придумал это. Я смог использовать strstr(), чтобы найти совпадение в двух строках, но после этого отображает, что строка # 1 находится в строке # 2, вся программа падает.

void zmaz(STUFF *p_akt, STUFF *p_prv, STUFF *p_vymaz){ 
char meno_autor[100]; 
scanf("%s", meno_autor); 
while(p_akt!=NULL) { 
    if(strstr(p_akt->autori,meno_autor)!=NULL){ 
     printf("string %s is in %s\n", meno_autor, p_akt->autori); 

     p_vymaz=p_akt; 
     if (p_prv == p_vymaz){ //deleting the first node 
      p_prv = p_prv->p_dalsi; 
     } 

     else { 
      p_akt = p_prv; 
      while (p_akt->p_dalsi != p_vymaz) p_akt = p_akt->p_dalsi; 
      p_akt->p_dalsi = p_vymaz->p_dalsi; 
     } 
     free((void*)p_vymaz); 
    } 
p_akt=p_akt->p_dalsi; 
} 
} 

Мне не нужно удалять только узел, но также перемещать следующие узлы, чтобы между ними не было никакого промежутка. Я пытался объяснить все как мог. Спасибо!

+0

попробуйте использовать отладчик. –

ответ

0

Причина она не потому, что вы делаете следующую последовательность кода:

while(){ 
    if(){ 
     ... 
     p_vymaz=p_akt; 
     ... 
     free((void*)p_vymaz); 
    } 
    p_akt=p_akt->p_dalsi; 
} 

Вы освободили p_akt назначая p_vymaz к p_akt, а затем освобождая p_vymaz. Таким образом, p_akt->p_dalsi больше не действителен.

0

Я действительно надеюсь, что это не настоящий проект. У вас есть buffer overflow, висящий там, ожидающий своего случиться.

Поскольку это домашнее задание, я бы сказал вам использовать отладчик, например, @Mitch Wheat. Но также имейте в виду, что если вы напишете код в своей материнской теме, что не является английским, людям из Интернета будет очень сложно следовать им и помогать.

К счастью, некоторые будут, как @Marc Claesen здесь.

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