程序在运行时崩溃,但在步进时不会崩溃

时间:2016-02-04 20:33:07

标签: c++ qt

我在过去几天里第一次开发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;
    }
}

快速背景 - &#39; twoDVector&#39;是我创建的类型,声明为:

typedef <vector <vector<char> > twoDVector;

1 个答案:

答案 0 :(得分:2)

问题似乎是for循环中的条件。

for (auto& e: tempPattern)
    std::reverse(e.begin(), e.end());

将运行多次等于向量中第一行的列数。如果这与向量中的行数不同,那么您要么不会更改足够的数据,要么超过向量的末尾,这是未定义的行为并且可能导致访问冲突。

如果要循环遍历向量中的所有行,则需要

{{1}}

或者更好地使用ranged based for loop之类的

{{1}}