C++链表大调用数分段错误

C++ linked list big call number Segmentation fault

我创建了链表,现在当我想在我的列表中查找特定数据时遇到问题:示例我在我的列表中插入 200 000 个字符串,当我调用 list->at(1)(1 id 是列表中的最后一个字符串)我遇到了分段错误,如果我调用 list->at(100 000) 它工作完美 我的代码是:

stringList.h:

#ifndef STRINGLIST_H
#define STRINGLIST_H
#include <iostream>
#include <string>
using namespace std;

class stringList
{
    public:
        stringList();
        virtual ~stringList();
        void insert(string *newString);
        void insert(string newString);
        int size();
        string at(int poz);
        void display();
        void clear();    
    protected:
    private:
        string* atP(int *poz);
        stringList *itsList;
        string *itsString;
        int *sizeString;
        string  *buff;
        //staticint *sizeString;
        int *itsPoz;
};

#endif // STRINGLIST_H

stringList.cpp:

#include "stringList.h"    
stringList::stringList()
{
    itsList=0;
    itsString=0;
    sizeString=0;    
    itsPoz=new int(0);
    buff=new string;
}    
stringList::~stringList()
{
    delete sizeString;
    sizeString=0;
    delete itsPoz;
    itsPoz=0;
    delete buff;
    buff=0;
    delete itsString;
    itsString=0;
}
void stringList::insert(string *newString){
    if(!sizeString){    
        sizeString=new int(0);
    }    
    if(!sizeString){
        sizeString=new int(0);
    }    
    stringList *newList=new stringList;
    stringList *tmp=new stringList;
    if(itsList){
        *sizeString=*itsList->itsPoz+1;    
        tmp=this->itsList;
        this->itsList=newList;
        this->itsList->itsString=newString;
        *this->itsList->itsPoz=*sizeString;
        this->itsList->itsList=tmp;    
    }else{
        this->itsList=newList;
        this->itsList->itsString=newString;
        *this->itsList->itsPoz=0;    
    }    
}
void stringList::insert(string newString){    
    string *p_string=new string;
    if(!sizeString){
        sizeString=new int(0);
    }    
    *p_string=newString;
    stringList *newList=new stringList;
    stringList *tmp=new stringList;
    if(itsList){
        *sizeString=*itsList->itsPoz+1;    
        tmp=this->itsList;
        this->itsList=newList;
        this->itsList->itsString=p_string;
        *this->itsList->itsPoz=*sizeString;
        this->itsList->itsList=tmp;    
    }else{
        this->itsList=newList;
        this->itsList->itsString=p_string;
        *this->itsList->itsPoz=0;   
    }    
}    
int stringList::size(){
    if(sizeString)
    return *sizeString+1;
    else
        return 0;   
}
string stringList::at(int poz){    
    if(!sizeString){
            return "NEMA LISTE";    
    }
    if(poz>*sizeString){
        return "";
    }    
    buff=this->atP(&poz);   
    return *buff;    
}
string* stringList::atP(int *poz){    
    if(*this->itsList->itsPoz==*poz){    
            return this->itsList->itsString;    
    }
    else{    
        return this->itsList->atP(poz);    
    }    
}
void stringList::display(){    
    if(this->itsList){
        this->itsList->display();
    }
    if(itsString){
        cout<<*itsString<<" , "<<*itsPoz<<endl;    
    }    
}
void stringList::clear(){    
        if(this->itsList->itsList){
            this->itsList->clear();
        }
        delete itsList;
        delete sizeString;
        sizeString=0;
        itsList=0;   
}

我会添加静态成员:指向第一个和最后一个元素的指针。它们对很多事情都很有用

这是什么样的og segmetation fault?当线程试图访问没有明确权限的内存时,会产生执行保护模式?

如果 nr 2,则说明您的代码中存在错误。检查边界和类似的东西。

你想看我写在 fl 上的一个简单的链表吗?

stringList::at 中,您正在调用 stringList::atP,它会调用 stringList::at。这导致递归并且很可能导致堆栈溢出,然后以段错误终止程序。您可以将其更改为迭代方式,类似于

 list = this;
 do {
     if (itsPoz==poz) { /* found */ } 
 } while (list = this->itsList);

但是代码还有很多其他问题(永远不要在 header 的全局范围内做 using namespace std;,你显然是在没有所有权保证的情况下存储指针(即唱智能指针),等等)