[英]Qt segmentation fault on function return
我有一个返回迭代器的函数,并将迭代器保存在其中。 这是返回迭代器的函数(其中building
是一个枚举):
vector<building>::iterator it;
for (it = building.begin(); it != building.end(); ++it)
{
if(it->getType() == type)
return it;
}
return gebouwen.end();
现在,当我这样做时- it->isBusy();
Qt崩溃并给出分段错误。
isBusy
函数为:
bool isBusy( void) const { return busy ; };
当我调试时,Qt中的调试器在该行代码处停止并给出:
The inferior stopped because it received a signal from the operating system. Signal name: SIGSEGV Signal meaning: Segmentation fault
我不明白为什么这个简单的功能会使系统停止运行。 我已经重新启动,因为有人说这是因为您内存泄漏。 但这仍然无法解决。
这是最有可能的崩溃是通过调用引起isBusy ()
的“结束”所引用的对象上的方法迭代器返回的gebouwen.end()
没有与该特殊迭代器关联的对象,因此触发了未定义的行为。 您必须将该函数返回的迭代器与gebouwen.end()
进行比较,以确保找到了您的对象。
同样,在C ++中将void
C ++作为参数列表没有任何意义。 在C语言中, void foo()
和void foo (void)
之间有区别-第一个含义是foo
可以接受任何参数,而第二个含义则是它不能接受任何参数。 但这在C ++中没有任何意义,因此当您无缘无故又要输入4个字符时没有任何意义。
您正在返回局部向量的迭代器。 迭代器被复制,但是向量在返回后被销毁。 所以它崩溃了。
相反,您可能想要返回迭代器当前指向的项目: *it
。
您的代码是否真的是:
vector<building>::iterator foo( vector<building> & gebouwen, Type type )
{
vector<building>::iterator it;
for (it = gebouwen.begin(); it != gebouwen.end(); ++it) {
if(it->getType() == type)
return it;
}
return it;
}
然后采用弗拉德(Vlad)或塔玛斯(Tamas)的答案。 您可能正在调用gebouwen.end()-> isBusy(),这会导致SIGSEGV。 或在gebouwen超出范围后再打电话。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.