gpt4 book ai didi

c++ - 总是用 g++ 获得有趣的段错误

转载 作者:行者123 更新时间:2023-12-01 15:12:26 25 4
gpt4 key购买 nike

我正在研究简单的链表项目,除了 List 类析构函数之外一切正常。我试图删除列表中的每个节点,但 g++ 每次都会抛出段错误(即使是空的析构函数)。有人可以帮助我,我的代码有什么问题吗?谢谢!。
我的列表标题;

struct Node{
double data;
Node* next;
};

class List{
public:
List();
~List();

void insertF(double data);
void printList();

private:
Node* head;
Node* currNode;
};

列出源文件;
#include "List.h"

List::List(){
std::cout<<"Constructed Linked List";
}

void List::insertF(double dataX){

Node* nn = new Node;

if(!currNode){
head = nn;
nn->data=dataX;
currNode = nn;
}else{
currNode->next = nn;
nn->data = dataX;
currNode = nn;
}


}

void List::printList(){
Node* walker = head;

while(walker){
std::cout<<walker->data;
std::cout<<"----->";
walker = walker->next;
}
}

List::~List(){

Node* currNode = head, *nextNode = NULL;
while(currNode != NULL){
nextNode = currNode->next;
delete currNode;
currNode = nextNode;
}
std::cout<<"sd";

}
主要的;
#include "List.h"
using namespace std;


int main(){
List list;


list.insertF(3.0);
list.insertF(4.0);
list.printList();

}
甚至;

List::~List(){
std::cout<<"sd";

}
引发段错误。列表总是被填满,所以我不检查头部是否为空

最佳答案

您通过使用成员变量 head 的值调用了未定义的行为和 currNode没有初始化。
像这样初始化它们:

List::List(){
head = nullptr; // add this
currNode = nullptr; // add this
std::cout<<"Constructed Linked List";
}
或者像这样:
List::List() : head(nullptr), currNode(nullptr) { // add member initialization list
std::cout<<"Constructed Linked List";
}

关于c++ - 总是用 g++ 获得有趣的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63317840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com