我有一个 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()
函数是问题发生的地方。它似乎部分运行,然后以上面提到的退出代码停止。
有人可以检查一下代码并帮助我找出卡住的原因吗?任何改进的见解或建议将不胜感激。
const auto& upperdata = groupedTerms[i];
会因为 groupedTerms.push_back({ combinedMinterms, deletedArgs, stage, groupFromTop });
而变得悬空