线程1:EXC_BAD_ACCESS(代码=1,地址=0x9)



我试图刷新类的链表,但在为while循环设置条件的行中遇到了这个错误。


using namespace std;
class linkedList{
private:
struct list{
int num;
list* next;
};

list* head;
public:

void newList(int num);
void display() const;

};
int main(){

linkedList mylist;

mylist.newList(5);
mylist.display();

return 0;

}
void linkedList::display() const{
list* ptr;

ptr = head;

while (!ptr) {
cout << ptr->num << endl;
ptr = ptr->next;
}

}
void linkedList::newList(int num){

list* newNode;
list* nodeptr = nullptr;

newNode = new list;
newNode->num = num;
newNode->next = nullptr;

if(!head){
head = newNode;
}else{
nodeptr = head;

while(nodeptr->next){
nodeptr = nodeptr->next;
}
}

nodeptr->next = newNode;
}

需要纠正的三个问题:

  1. 在类定义中初始化head

    list* head = nullptr;
    
  2. 事实上,while声明中存在一个问题。当指针为null(!ptr(时,您将希望退出循环。要继续迭代,您的条件是相反的,这就是您必须指定的:

    while (ptr) {
    
  3. newList方法中,当前一个if中的条件为true时,也执行最后一条语句。在这种情况下,nodeptr是一个空指针。。。在最后一条语句中给出一个空指针异常(分段错误(。因此,在else块中移动该语句:

    }else{
    // ....
    nodeptr->next = newNode; // moved here
    }
    

最新更新