每次运行时都会出现分段错误11。希望得到帮助/反馈

时间:2015-04-14 02:50:16

标签: c++ fault

所以我正在对循环列表做一个非常基本的实现。我还没有删除功能。每当我运行cpp时,我都会遇到一个段错误11.任何反馈都会非常感激。谢谢。

#include <iostream>
using namespace std;

struct node{
    node* next=NULL;
    bool tail= false;
    int contents;
};
node* start;//start is a pointer that exists at the start of the list before the first element

class CircList{
node *seek;
public:

CircList (){  //creates a list of one node that points to itself
    node *b= new node;
        b->contents=0;
        b->next = b;
        start->next=b;
        b->tail=true;
}

bool empty(){
    if(start->next==NULL){
        return true;
    }
    return false;
}

int size(CircList a){
    if(start->next==NULL){
        cout<<"size is 0 \n";
        return true;
    }
    seek=start->next;
    for(int i=0; i++;){
    if(seek->tail==true){
        cout<<"size is "<<i;
    }
    seek=seek->next;
    }
    return 0;
}

void insert(int pos, int val){
    if(start->next ==NULL){//if inseting when the list is empty
        node *b= new node;
        b->next = b;
        b->tail=true;
        return;
    }

    node *b= new node;
    b->contents= val;
        seek=start->next;
    for(int i=0;i<=pos; i++){
        if(seek->tail==true){//if inserting at the end
            seek->tail=false;
            b->tail=true;
            seek->next=b;
            b->next=start->next;
        }
        if(pos==i){//if inserting between two nodes
            b->next = seek->next;
            seek->next = b;
        }
            seek=seek->next;
    }
    }
void remove(int a){
    seek=start->next;
     for(int i=0;i<=a-1; i++){
        if(i<a){
            seek=seek->next;
        }
        if(i==a-1){

}
     }
}

    void display(){
        cout<<start->next->contents; //will also be completed in the near future
        seek=start->next;
        for(int i=0; ;i++){
        if(seek->tail==false){
           cout<<seek->contents<<"\n";
        }
        if(seek->tail==true){
           cout<<seek->contents<<"\n";
           return;
        }
    }
        }
    };

那是.h文件。以下是cpp。我只是插入数字进行测试。我想让程序运行,以便我可以测试它的行为。

#include <iostream>
#include "CircList.h"
using namespace std;

int main(){

CircList a;
a.insert (5,5);
a.insert (5,5);
a.insert (1,4);
a.insert (20,65);
a.insert (3,7);
a.size(a);
a.display();
}

3 个答案:

答案 0 :(得分:0)

我一直将start视为节点而不是指针。通过使start = Null并替换所有&#34; start-&gt; next&#34;&#34; start&#34;,我得到它来编译和运行。但现在它只能在内容中无限插入值为0的节点。

编辑:我修好了。通过将显示函数中的那个奇怪的for循环更改为while循环,它不再对构造函数中的节点进行无限插入。它现在似乎运作得足够好。

答案 1 :(得分:0)

这会导致seg故障

start->next=b;

因为在程序开始时start为NULL所以你要取消引用空指针。

而是将start设置为构造函数中的第一个节点

start = b;

答案 2 :(得分:-1)

您的全局变量start是一个未初始化的指针,但您可以在整个地方取消引用它。