我遇到了添加或遍歷鏈接列表的問題。主項目類被另一個類使用,但我可以添加正確的這些類,但是看起來像我向列表添加更多數據時,應用程序不再有效。添加或遍歷鏈接列表的問題
我不確定錯誤的確切位置。我知道當我嘗試遍歷列表時,應用程序崩潰。任何想法或任何改進將不勝感激。
我可以通過將AddOccurence方法更改爲不執行while循環來使崩潰不發生。
做的
void Item::AddOccurence(int Item,int placeInLine){
ItemOccurence* ocr=myHead;
if(ocr)
{
}
代替
void Item::AddOccurence(int Item,int placeInLine){
ItemOccurence* ocr=myHead;
while(ocr)
{
}
基本上打的第一個節點,但沒有更多。
我有一個包含列表的對象。 這裏是.h文件 #include using namespace std;
class ItemOccurence{
public:
ItemOccurence(int line,int placeInLine,ItemOccurence* link=NULL) :myLine(line),myPlaceInLine(placeInLine),myLink(link){}
int myLine;
int myPlaceInLine;
ItemOccurence* myLink;
};
class Item {
public:
Item();
Item(string Item,int line,int placeInLine);
virtual ~Item();
void deallocate(ItemOccurence* p);
void AddOccurence(int Item,int placeInLine);
string myItem;
ItemOccurence* myHead;
private:
bool isEmpty();
};
和.cpp文件
#include "Item.h"
#include <string>
#include<iostream>
using namespace std;
Item::Item(string Item,int line,int placeInLine):myHead(NULL){
myItem=Item;
myHead= new ItemOccurence(line,placeInLine,NULL);
}
Item::Item():myHead(NULL){
myHead=0;
}
Item::~Item() {
deallocate(myHead);
myHead=0;
}
void Item::deallocate(ItemOccurence* p){
ItemOccurence* tmp;
while(p){
tmp=p;
p=p->myLink;
delete tmp;
}
}
void Item::AddOccurence(int Item,int placeInLine){
ItemOccurence* ocr=myHead;
while(ocr)
{
cout<<"orrucence head while adding " << myHead->myLine << " " << myHead->myPlaceInLine <<"\n";
ocr=ocr->myLink;
}
myHead = new ItemOccurence(Item,placeInLine,myHead);
return;
}
bool Item::isEmpty(){
if(myHead)
return false;
else
return true;
}
編輯: 我更新AddOccurence是。
void Item::AddOccurence(int line,int placeInLine){
ItemOccurence* prev = myHead;
ItemOccurence* curr = myHead->myLink;
while(curr){
prev=curr;
curr=curr->myLink;
}
// insert new ItemOccurence
cout<<"adding " <<line<< " and " << placeInLine <<"\n";
prev->myLink = new ItemOccurence(line,placeInLine);
return;
}
但我仍然崩潰。我試圖調試但不知道要尋找什麼。
有沒有不使用'std :: list'或'boost :: intrusive'的原因? – pmr 2010-06-30 19:35:09
@pmr只有一個原因:教育。 – Andrey 2010-06-30 19:39:04
你是否意識到你在每個構造函數中初始化myHead兩次?這並不重要,但是你將它設置爲NULL或0也不一致。兩種方式都有爭論,但你至少應該保持一致。 – RickNotFred 2010-06-30 20:00:05