程序在运行时崩溃,但在单步执行时不会崩溃
Program Crashes at Runtime, but doesn't crash when being stepped through
在过去的几天里,我一直在第一次开发QT应用程序,进展顺利。今天,我在程序中添加了一个常规C++函数并对其进行了测试。
1.如果我删除对此函数的调用,那么程序将完美运行而不会崩溃(当然没有新功能)
2.如果我将函数调用回程序中,那么我的程序将在运行时崩溃(当我单击按钮启动程序时)。
3.但是,如果我将函数保留在程序中,并在函数的开头放置断点,我可以单步执行整个程序,直到它完成而不会发生任何崩溃。以前有人经历过这样的事情吗?
以下是导致问题的函数(我相信我收到访问冲突错误):
void SokoGenerator::rotatePattern(twoDVector *pattern, int rotation){
twoDVector tempPattern = *pattern;
if(rotation == 1){
//Rotate by 90 - reverse each row
for(int i = 0; i < tempPattern[i].size(); i++){
std::reverse(tempPattern[i].begin(), tempPattern[i].end());
}
*pattern = tempPattern;
}
else if(rotation == 2){
//Rotate by 180 - reverse each row, then each column
for(int i = 0; i < tempPattern[i].size(); i++){
std::reverse(tempPattern[i].begin(), tempPattern[i].end());
}
std::reverse(tempPattern.begin(), tempPattern.end());
*pattern = tempPattern;
}
else if(rotation == 3){
//Rotate by 270 - reverse each column
std::reverse(tempPattern.begin(), tempPattern.end());
*pattern = tempPattern;
}
}
快速背景 - "twoDVector"是我创建的类型,声明为:
typedef <vector <vector<char> > twoDVector;
问题似乎是 for 循环中的条件。
for(int i = 0; i < tempPattern[i].size(); i++)
将运行等于向量中第一行的列数的次数。 如果这与向量中的行数不同,那么您要么不会更改足够的数据,要么会超过向量的末尾,这是未定义的行为,可能会导致访问冲突。
如果你想遍历向量中的所有行,那么你需要有
for(int i = 0; i < tempPattern.size(); i++)
或者更好的是使用基于范围 for 循环,例如
for (auto& e: tempPattern)
std::reverse(e.begin(), e.end());
相关文章:
- 执行函数时导致崩溃的变量
- 排序时无法执行交换操作.我做的时候它会崩溃.为什么
- Linux 可执行文件通过 dlopen 在emplace_back崩溃打开共享库
- 测试操作系统时执行程序集"sti"时虚拟框崩溃
- 在目标计算机上访问 POSIX 信号灯时出现可执行文件崩溃(SEGV_MAPERR)
- 执行递归函数时 C++ 应用程序崩溃
- 应用程序在 C++ QT 上执行 sql 后崩溃
- 程序在开关中执行第二种情况后崩溃
- std::map<string, int> 在执行 m[0] 时崩溃
- 如何在启动过程中崩溃时使用 gdb 调试可执行文件
- 为什么在Shell输出中运行的可执行操作到stdout,而不是崩溃时的stderr
- 是否可以在程序崩溃后执行代码?
- 程序在循环执行后崩溃
- 当静态对象执行静态对象时,崩溃
- 当托管它崩溃的可执行过程时,全局挂钩会发生什么
- 在执行字符串时更改字符会使程序崩溃
- 带有Qt的程序在其他计算机上执行时崩溃
- C 时间类没有编译错误,执行停止和应用程序在CheckDay函数中崩溃错误
- C++可执行文件崩溃
- 执行析构函数时,服务器应用程序总是崩溃