#include <iostream>
#include "Student.h"
#include "SortedList.h"
using namespace std;
#define BOUNDS 100
int main() {
SortedList *list = new SortedList(); // points to the sorted list object
Student *create[BOUNDS]; // array to hold 100 student objects
int num = 100000; // holds different ID numbers
// fills an array with 100 students of various ID numbers
for (int i = 0; i < BOUNDS; i++) {
create[i] = new Student(num);
num += 10;
}
// insert all students into the sorted list
for (int i = 0; i < BOUNDS; i++)
list->insert(create[i]);
// removes each student from the list
num = 100000;
for (int i = 0; i < BOUNDS; i++) {
list->remove(num);
num += 10;
}
delete list;
return 0;
}
前のコードでsegフォルトが発生しています。なぜこれがどのようになっているのか、それをどう修正するのかについての洞察は高く評価されます。ここに私のSortedListのデストラクタがあるセグメンテーションフォールトC++
/*
* Destructs this sorted list object
*/
SortedList::~SortedList() {
freeList(head);
}
/*
* Traverses throught the linked list and deallocates each node
*/
void SortedList::freeList(Listnode *L) {
Listnode *tmp = L; //holds the node to be deleted
//traverses the list
while (tmp != NULL) {
Listnode *next = tmp->next; //holds the value of the next node
//delete previous node
delete tmp->student;
delete tmp->next;
delete tmp;
//sets the next node to the node to be deleted
tmp = next;
}
//delete header node
delete L;
}
'delete list'は'〜SortedList() 'を呼び出す必要がありますので、デストラクタは何もしませんか? –
あなたがそれを見て気にするならば、私はSortedListデストラクタを1分で投稿します。 –
それでは、 'SortedList :: freeList'から' delete tmp-> next; '行を削除することです。ソートされたリストがそれに渡されたすべてのストレージを所有していると仮定していますか? 'student'が指すスペースを所有していない場合、' delete tmp-> student; 'はおそらく正しくありません。 SortedList :: removeが何をするのかははっきりしない。それはListNodeを削除しますか、それともListNodeを削除して 'student'メンバを削除しますか? 'student'メンバーも削除すると、' SortedList :: freeList'と一貫性があります。それ以外の場合はそうではありません。 – gbulmer