2013-05-06 3 views
-1

안녕하세요 저는 구조 기반 프로젝트 인 연결된 목록에서 작업 중이며 거의 도움을 요청하지 않습니다. 하나의 문자열이 struct 데이터의 문자열의 일부일 때 연결된 목록에서 노드를 삭제해야합니다.문자열이 일치 할 때 연결된 목록의 노드 삭제

지금까지 나는 이것을 생각해 냈습니다. 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; 
} 
} 

노드를 삭제하면 안되며 다음 노드도 이동시켜야합니다. 내가 할 수있는 한 모든 것을 설명하려고 노력했다. 고맙습니다! p_akt하는 p_vymaz을 할당하고 p_vymaz을 확보하여

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

당신은 해제 한 p_akt : 당신이 코드의 다음 순서를 만들기 때문에

+0

디버거를 사용해보십시오. –

답변

0

실패하는 이유입니다. 따라서 p_akt->p_dalsi은 더 이상 유효하지 않습니다.

0

정말이 프로젝트가 진짜가 아니길 바래요. 거기에 buffer overflow 명이 걸려 대기 중입니다.

숙제이므로 @Mitch Wheat과 같은 디버거를 사용하는 것이 좋습니다. 또한 영어가 아닌 모국어로 코드를 작성하는 경우 인터넷에서 온 사람들이이를 따르고 도움을받는 것이 매우 어려울 것임을 명심하십시오.

다행히 일부는 @Marc Claesen과 같은 것입니다.

관련 문제