链表中的分段错误
Segmentation fault in a linked list
我正在尝试为多项式制作一个程序。我使用 addTerm 函数向多项式添加一个元素。函数的第一个"else"部分似乎存在段错误。
#include <iostream>
#include <math.h>
using namespace std;
class Polynomial{
protected:
class Term{
public:
int exponent;
int coefficient;
Term *next;
Term(int exp, int coeff,Term *n){
exponent = exp;
coefficient = coeff;
next=n;
};
friend class Polynomial;
};
Term *head;
public:
Polynomial(){
head=nullptr;
head->next=nullptr;
}
Polynomial(const Polynomial &p){
head=nullptr;
Term* curr=p.head;
while(curr!=nullptr){
addTerm(curr->exponent,curr->coefficient);
curr=curr->next;
}
}
~Polynomial(){
Term* curr=head;
while(curr!=nullptr){
Term* next=curr->next;
delete curr;
curr=next;
}
head=nullptr;
};
Polynomial & operator = (const Polynomial &p){
Term* curr=head;
while(curr!=nullptr){
Term* next=curr->next;
delete curr;
curr=next;
}
head=nullptr;
Term* current=p.head;
while(current!=nullptr){
addTerm(current->exponent,current->coefficient);
current=current->next;
}
return *this;
};
void addTerm(int expon, int coeff){
if(head==nullptr){ //adeia lista
Term* t=new Term(expon,coeff,nullptr);
head=t;
// cout<<t->exponent<<t->coefficient;
}
else{
if(expon>head->exponent){
Term* temp= new Term(expon,coeff,head);
temp->next=head;
head=temp;
}
else{
Term* current=head;
for(current=head;expon!=current->exponent;current=current->next){
if(current==nullptr) break;
}
if(current->exponent==expon){
current->coefficient=current->coefficient+coeff;
}
else{
current=head;
Term* prev=head;
while(expon<current->exponent){
prev=current;
current=current->next;
}
Term* temp=new Term(expon,coeff,current);
prev->next=temp;
}
}
}
我运行它的代码是:
int main(){
Polynomial p;
p.addTerm(3,1);
p.addTerm(2,3);
}
您的程序在多项式构造函数中崩溃,如下所示:
Polynomial() {
head=nullptr;
head->next=nullptr;
}
这不起作用,因为您已将"head"设置为null,然后您尝试访问head->next。
当 head 为空时,不能使用 head->next。尝试这样做将导致"分段错误"崩溃。
相关文章:
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 为什么我使用 std::copy() 收到运行时错误(分段错误)?
- 为什么我的代码包含错误分段错误(核心转储)?
- 为什么会出现此错误?- 分段错误(核心转储)
- 意外的运行时错误(分段错误)
- C++将文本文件读入数组,运行错误:分段错误
- mmap 错误:分段错误/指针无效错误
- 在我的代码中找不到错误....分段错误
- 错误:分段故障(核心转储)阵列
- 用string.h将错误分段到队列中
- c++字符串流转换错误:分段错误
- 为什么我的代码显示错误分段错误(核心转储)