2015-06-09 2 views
1

Как удалить все объекты из связанного списка, реализованные в struct? После того, как моя функция delete-funktion (loeschen) показана комическими числами, и я больше не знаю, где мои указатели.Struct, связанный список, удалить весь список

struct domino { 
int data1; 
int data2; 
domino *next; 


}; 

int readSteine(){ //Reading from numbers from file 
    FILE *file; 


    if((file=fopen("datei.dat", "r"))==NULL) {/
     std::cout<<"File cant be open"<<std::endl; 
     return 0; 
    }else { 
     int beginning; 
     int temp; 
     fscanf(file, "%d", &beginning); 

     for(int i=0; i<beginning; i++) { 
      domino *domino1= new domino; 
      //if(i>0) temp2->next=domino1; 
      fscanf(file, "%i", &temp); 
      domino1->data1=temp; 
      fscanf(file, "%i", &temp); 
      domino1->data2=temp; 
      printf("[%d:%d]", domino1->data1, domino1->data2); 
      domino1->next=0; 
     } 
    }return 0; 
} 

Функция для удаления из списка:

void deletelist (domino *head) { 
    domino* tmp; 
    while(head != 0) { 
     tmp=head->next; 
     delete head; 
     head=tmp; 
    } 

} 


int main() { 
    domino *pHead=NULL; 
domino s; 
    readSteine(); 
    deletelist(pHead); 
    std::cout<<s.data1<<"...."<<s.data2<<std::endl; 

    return 0; 
} 
+1

Hi Diana. Во-первых, вам нужно передать свой Kopf функции readSteine ​​и назначить его каждому новому следующему, а затем назначить ему новое домино и т. Д., Чтобы сформировать связанный список. – qPCR4vir

+0

@ACV, хотя это может помочь нам понять проблема быстрее, это определенно не поможет OP изучать C++ на иностранном языке. – Quentin

ответ

1

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

Node *pDel = _pHead; 

    /* Traverse the list and delete the node one by one from the head */ 
    while (pDel != NULL) { 
     /* take out the head node */ 
     _pHead = _pHead->_pNext; 
     delete pDel; 
     /* update the head node */ 
     pDel = _pHead; 
    } 
    /* Reset the head and tail node */ 
    _pTail = _pHead = NULL; 
+0

Хорошо, спасибо большое! –

-1

Определим функцию либо как

void loeschen (dominostein **kopf) { 
    dominostein* tmp; 
    while(*kopf != 0) { //bzw. NULL 
     tmp = (*kopf)->next; 
     delete *kopf; 
     *kopf = tmp; 
    } 
} 

и назвать его как

loeschen(&pKopf); 

или следующим образом

void loeschen (dominostein * &kopf) { 
    dominostein* tmp; 
    while(kopf != 0) { //bzw. NULL 
     tmp = (kopf)->next; 
     delete kopf; 
     kopf = tmp; 
    } 
} 

и назвать его как

loeschen(pKopf); 

Вашей оригинальная функция также является правильной, но после того, как deleteing всех узлов

loeschen(pKopf); 

вы должны установить pKopf в NULL

pKopf = NULL; 

Или вы просто не должны использовать этот указатель для доступа удаленных узлов .)

Учтите, что это заявление

std::cout<<s.data1<<"...."<<s.data2<<std::endl; 

не имеет смысла, потому что данные члены data1 и data2 объекта s не inistilaized, когда объект был создан

domino s; 

И этот объект не имеет ничего общего со списком.

И функция readSteine не использует узел pHead, определенный в главном

domino *pHead=NULL; 
//... 
readSteine(); 

Вы shpuld переписать функцию. Это неверно.

-1

Ваш loeschen никогда не будет работать, потому что вы передадите ему только NULL. Сначала вам нужно правильно составить список. Во-первых, вам нужно передать свой Kopf (вид ссылки на него) функции readSteine ​​и назначить его каждому новому следующему, а затем назначить ему новое домино и т. Д., Чтобы сформировать связанный список.

Я настоятельно рекомендую вам ознакомиться с Programming: Principles and Practice Using C++.

Вы смешиваете функции C и стиль программирования с C++. Вам даже не нужно знать эти функции C, которые трудно понять, чтобы начать изучать C++.

+0

Голос голосования, потому что это не ответ. Должен был комментарий (хотя для его соответствия было бы несколько комментариев ...) –

+0

@EvanCarslake. Ты уверен? Как это не правильный ответ? Получил ли yuo Q? Почему ничего не удаляется? Почему комический «-разовый» выход? Функция удаления в порядке. – qPCR4vir

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