我是創建鏈表,現在我有問題,當我想在我的列表中找到特定數據:例如我插入我的列表200 000字符串,當我打電話list-> at 1)(1個id的列表最後一個字符串)我得到段錯誤,如果我叫列表 - >在(100 000)它的工作完美 我的代碼是:C++鏈表大電話號碼分段錯誤
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;
}
我建議您在這裏發佈代碼時,刪除多個連續的空白行。我讓更多的滾動查看整個代碼。 – crashmstr
當你有段錯誤時,應該生成一個核心文件。你可以看看這個核心文件(在linux上,它是用gdb完成的),看看它在哪裏做核心。 – SergeyA
有沒有一個很好的理由,不要使用std :: list,並重新發明輪子,但這次是方形的嗎? – cdonat