ads*_*rek 0 c++ pointers linked-list segmentation-fault
我目前正在获得一个seg错误,并且它从我认为是main中的一行开始,在gdb中进行回溯之后,我基本上可以找到它,但我不确定需要改变什么.这是我按顺序看到的地方:
首先是主要:
DeckOps *deck = new DeckOps(filename);
Run Code Online (Sandbox Code Playgroud)
我相信是导致它的线,回溯也包括
class DeckOps{
public:
DeckOps(string filename);
~DeckOps();
private:
dlist *deck;
}
Run Code Online (Sandbox Code Playgroud)
然后是.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();
}
Run Code Online (Sandbox Code Playgroud)
然后最后是最后一个地方
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;
}
Run Code Online (Sandbox Code Playgroud)
在DeckOps::DeckOps
,线
deck->insertRear(card);
Run Code Online (Sandbox Code Playgroud)
可能是导致段错误.deck
是一个指针,但你从来没有将它初始化为任何东西(喜欢deck = new dlist
或其他),所以它指向内存中的随机位置(或0
根据你的编译器初始化),你试图使用它指向的随机内存(或取消引用)一个NULL
指针,再次取决于你的编译器),导致段错误.在使用它之前,您需要在构造函数的顶部执行此操作.
如果你修复了它并且它仍然有段错误,那么它首先有一个以上的问题,可能是dlist
代码中的某个地方.
归档时间: |
|
查看次数: |
290 次 |
最近记录: |