所以我已经调试这个错误几个小时了。我使用 Ogre3d 编写了一个相关的程序,只是因为它不加载符号,所以它不会让我堆栈跟踪,这使得找到崩溃的位置变得更加困难。所以,在我调用一个特定的函数之前写,我打印出“开始”,然后我调用这个函数,然后在我打印“停止”之后立即调用。在整个函数中,我打印出字母 AF,其中 F 在函数返回之前打印出来(最后一个 '}' 上方的一行) '。这是否意味着崩溃发生在某处之间?我唯一能想到的是在函数期间分配的一些内存的释放过程中出现了问题。我'
问问题
8357 次
4 回答
2
这可能意味着当函数返回并且某个析构函数正在触发时发生错误。很有可能你有一些析构函数试图释放它不拥有的内存,或者在日志中注销某个缓冲区的末尾,等等。
如果您不刷新输出流,可能会出现另一种需要注意的可能性。可能正在打印“Stopping”,但在点击stdout
. 确保检查这一点,因为如果这是发生的事情,你会在错误的树上吠叫。
于 2011-01-15T09:55:32.260 回答
2
我遇到了类似的问题,结果发现当签名期望返回类型为 std::shared_ptr 时,我的函数没有返回任何内容,即使我没有在任何地方使用返回。
该函数具有以下签名:
std::shared_ptr<blDataNode> blConditionBasedDataSelectionUI::selectData(std::shared_ptr<blDataNode> inputData)
{
// My error was due to the function
// not returning anything
}
于 2018-06-11T20:36:06.677 回答
0
我遇到了同样的问题,结果我忘记在添加新项目之前初始化我的向量,这在我的函数将向量与其他列表进行比较时导致错误。
std::vector<cv::Point> lefteyeCV;
void Init() {
// I need to add "lefteyeCV.clear();" here!
for (int i = 0; i < 8; i++) {
lefteyeCV.push_back(cv::Point(0, 0));
}
}
// the following comparison will crash after "return 0"
// because cl_ is of size 8, but if I run "Init()" twice, lefteyeCV.size() = 16
// then the comparison is out of range.
int irisTrack(){
for (int i = 0; i < lefteyeCV.size(); i++) {
cl_[i] = cv::Point(lefteyeCV[order[i]].x - leftRect.x, lefteyeCV[order[i]].y - leftRect.y);
}
return 0;
}
令人困惑的是,我正在使用 Xcode 并且应用程序在“返回 0”之后立即崩溃,并带有难以理解的消息“线程 13:信号 SIGABRT”。但是,使用 Visual Studio 向我展示了 index 超出范围的行。
于 2019-09-15T02:39:54.360 回答