【发布时间】:2011-05-20 21:55:38
【问题描述】:
我目前遇到一个段错误,它从我认为是 main 中的一行开始,在 gdb 中进行回溯之后,我基本上可以查明它,但我不确定需要更改什么。以下是我按顺序看到的地方:
主要的:
DeckOps *deck = new DeckOps(filename);
我相信是导致它的行,回溯也包括
class DeckOps{
public:
DeckOps(string filename);
~DeckOps();
private:
dlist *deck;
}
然后是 .cpp 文件
DeckOps::DeckOps(string filename){
ifstream inF;
inF.open(filename.c_str());
if (inF.fail()){
cerr << "Error opening file" << endl;
exit(1);
}
int deckcount = 28;
int card;
for(int i = 0; i <= deckcount; i++){
inF >> card;
deck->insertRear(card);
}
inF.close();
}
最后是最后一个地方
void dlist::insertRear(int d){
LinkNode *link = new LinkNode();
int *nd = new int();
*nd = d;
link->data= nd;
if(first == 0){
first = last = link;
return;
}
last->next = link;
link->prev = last;
last = link;
}
【问题讨论】:
-
与您的问题无关,但为什么要创建这样的对象:
DeckOps *deck = new DeckOps(filename);为什么不DeckOps deck(filename);- C++ 不是 Java。 -
我同意尼尔的观点,尽量少用
new。它将为您提供速度提升,并且无需手动管理内存。 -
这就是我学习的方式,我试过你说要这样做,但没有用。
标签: c++ pointers linked-list segmentation-fault