我在类中编写了一个打印函数,出现了分割错误。
void print() {
int i;
for(i=0; i<counter; i++){
parents[i]->print();
}
}
父对象是指向父对象的指针数组。父对象打印为:
void print() const{
int i;
std::cout << "Desired teachers:" << tnumb << std::endl;
for(i=0; i<tnumb; i++){
std::cout << "Teachers number:" << teachers[i] << "t";
}
std::cout << std::endl;
}
我已经确认如果我在我的主目录中创建一个新父母然后调用它,它就可以工作。令人感兴趣的是,如果我这样写printq:
void print() {
int i;
for(i=0; i<counter; i++){
std::cout << "okt";
}
}
不会出现分段错误,并且会有预期的 ok 数量(计数器 BTW 是一个 int 类型,用于计算父数组中的项目数)。但是如果我这样写:
void print() {
int i;
for(i=0; i<counter; i++){
std::cout << "okt";
parents[i]->print();
}
}
没有打印一个OK,并且出现分段错误。我不明白为什么连第一个 cout 都没有执行。
抱歉,如果我的代码太通用了。我试图保留必需品,因为它仍然很乱,很容易迷路。
下面是类的构造函数:
queue(int _size): start(0), end(0), current(0), size(_size), counter(0){
parents = new parent *[size];
}
并且使用此推送功能在父项中插入一个父项:
void push(parent *p){
if(p->get_done()){
return;
}
p->set_start();
if(p->enter_start()){
std::cout << "*Entire line boos*n";
}
if(!full()){
end++;
counter++;
parents[end] = p;
}else{
std::cout << "Parents queue is fulln";
}
}
set_start和线路嘘声正在工作,对父级没有实际影响(它只是一个带有简单标志的 senario,它会触发或不触发 cout)。计数器提供到目前为止插入的项目数,而 end 是一个 int,用于提供队列中最后使用的位置。
消息父队列已满未显示,因此父项[结束]必须包含父项 p。
如果需要更多信息,请发表评论,我会编辑它
很可能您正在尝试在空指针上调用 print()。
parents[i]->print();
在上面的代码中,parents[i]
可能为 null。
您可以在访问parents[i]
之前做一个简单的测试,如下所示:
if (parents[i] != NULL) {
parents[i]->print();
} else {
std::cout << " parents[" << i << "] was null!" << std::endl;
}
也像 TrebuchetMS 在上面的评论中提到的那样,您可以冲洗 cout 以确保尽管存在分段错误,但所有内容都能打印出来。因此,我建议将其作为最终代码,以帮助您进行调试:
void print() {
int i;
for(i=0; i<counter; i++){
std::cout << "okt";
cout.flush();
if (parents[i] != NULL) {
parents[i]->print();
} else {
std::cout << "parents[" << i << "] was null!" << std::endl;
cout.flush();
}
}
}
这不会帮助你找出为什么parents[i]
是空的,但会证明它是空的。下一步是找出为什么它是 null,为此我们需要查看更多代码。
调试愉快!
由于a7ger在调试方面的帮助,我发现了错误。显然,我正在尝试访问空指针成员。我在做end++
然后parents[end] = p
,而我应该做相反的事情。感谢您的帮助