C++ 代码在执行期间卡住并出现退出代码 -1073741819 (0xC0000005)

问题描述 投票:0回答:1

我有一个 C++ 函数在执行过程中卡住了,我得到

Process finished with exit code -1073741819 (0xC0000005)
。我尝试过调试它,但我不明白为什么它会卡住。

当然,我搜索了错误代码的含义,它是“访问冲突”或“分段错误”。但我还是没能解决问题

这个函数是我正在编写的类的一部分,但现在我已经清理了代码并将有问题的部分隔离到一个名为

groupMinterms()
的函数中。这是代码的精炼版本:

#include <vector>
#include <iostream>

struct GroupedData {
    std::vector<int> mintermsIncluded;
    std::vector<int> deletedArgs;
    int stage;
    int groupFromTop;
};

std::vector<GroupedData> groupedTerms = {
        {{0}, {}, 0, 0},
        {{1}, {}, 0, 1},
        {{2}, {}, 0, 1},
        {{4}, {}, 0, 1},
        {{8}, {}, 0, 1},
        {{3}, {}, 0, 2},
        {{5}, {}, 0, 2},
        {{6}, {}, 0, 2},
        {{9}, {}, 0, 2},
        {{7}, {}, 0, 3}
}; //initializing the vector only for testing purposes

bool isPowerOfTwo(int num) {
    return num > 0 && (num & (num - 1)) == 0;
}

void groupMinterms() {
    int stage = 1;
    int groupFromTop = 0;
    int startIndex;
    int endIndexHolder = 0;
    std::vector<int> combinedMinterms;
    std::vector<int> deletedArgs;

    while (true) {
        startIndex = endIndexHolder;
        endIndexHolder = groupedTerms.size();
        bool anyAdded = false;

        for (int i = startIndex; i < endIndexHolder; i++) {
            const auto& upperdata = groupedTerms[i];

            for (int j = i + 1; j < endIndexHolder; j++) {
                const auto& lowerdata = groupedTerms[j];

                if (upperdata.stage == lowerdata.stage && upperdata.groupFromTop + 1 == lowerdata.groupFromTop && isPowerOfTwo(lowerdata.mintermsIncluded[0] - upperdata.mintermsIncluded[0])) {

                    combinedMinterms.clear();
                    combinedMinterms.insert(combinedMinterms.end(), upperdata.mintermsIncluded.begin(), upperdata.mintermsIncluded.end());
                    combinedMinterms.insert(combinedMinterms.end(), lowerdata.mintermsIncluded.begin(), lowerdata.mintermsIncluded.end());

                    deletedArgs.clear();
                    deletedArgs.insert(deletedArgs.end(), upperdata.deletedArgs.begin(), upperdata.deletedArgs.end());
                    deletedArgs.push_back(lowerdata.mintermsIncluded[0] - upperdata.mintermsIncluded[0]);

                    groupedTerms.push_back({ combinedMinterms, deletedArgs, stage, groupFromTop });
                    anyAdded = true;
                }
            }
            groupFromTop++;
        }

        if (!anyAdded)
            break;

        stage++;
    }
}

int main() {
    groupMinterms();

    // Print the contents of groupedTerms for verification, but because of the problem, it
    //  never reaches here:
    for (const auto& data : groupedTerms) {
        std::cout << "stage: " << data.stage << "| groupFromTop: " << data.groupFromTop;
        std::cout << " | Minterms Included:";
        for (const auto& minterm : data.mintermsIncluded) {
            std::cout << " " << minterm;
        }
        std::cout << std::endl;
    }

    return 0;
}

代码使用结构体

GroupedData
来保存分组的最小术语和一些相关信息。
groupMinterms()
函数是问题发生的地方。它似乎部分运行,然后以上面提到的退出代码停止。

有人可以检查一下代码并帮助我找出卡住的原因吗?任何改进的见解或建议将不胜感激。

c++
1个回答
0
投票

const auto& upperdata = groupedTerms[i];
会因为
groupedTerms.push_back({ combinedMinterms, deletedArgs, stage, groupFromTop });

而变得悬空
© www.soinside.com 2019 - 2024. All rights reserved.