Segmentation Fault (Core Dumped)



在第40行,我的代码停止运行并输出信号:分段错误(核心转储),我很困惑为什么我的代码是分段错误,因为我没有访问任何超出边界的索引,也没有修改字符串文字。基本上,如果值(k + i)大于N,我想向后迭代,直到有一个点";在array(patches)中放置一个补丁"或"G".

这是我正在接受的输入:15个4GHHGG

下面是我写的代码:
#include <iostream>
#include <vector>
#include <array>
using namespace std;
int main() {
string cows;
int CONST_N = 100000;
array<string, 100000> patches;
int t, n, k, patchCounter{}; cin >> t;
while(t--){ 
patchCounter = 0;
cin >> n; cin >> k;
cin >> cows;
//  cout << n << endl;
for(int i = 0 ;i < CONST_N;i++){
patches[i] = "N";
}
for(int i = 0 ;i < n ;i++){
patches[i] = ".";
}
for(int i = 0; i < n ;i++){
if(cows.substr(i, 1) == "G"){
if(patches[k + i] == "N"){
for(int j = n - 1; j >=0;j++){
if(patches[j] == "."){
patches[j] = "G";
break;
}
}
} else {
patches[k+i] = "G"; i+=(2*k); patchCounter++; 
}
}
}
for(int i = 0; i < n ;i++){
if(cows.substr(i,1) == "H"){
// cout<<(patches[k +i]  == "N") << endl;
//cout << patches[k +i] << endl;
if(patches[k + i] == "N"){
cout << "hello";
for(int j = n - 1; j >=0;j++){
if(patches[j] == "."){
patches[j] = "H";
break;
}
}
} else {
patches[k+i] = "H"; i+=(2*k); patchCounter++; 
}
}
}
cout << patchCounter << endl;
for(int i = 0 ;i < n ;i++){
cout << patches[i];
}
cout << endl;

}
return 0;
}

我不确定该怎么做,因为数组大小是10^5,我只访问索引6,所以我很困惑发生了什么。我真的很感激你的帮助。谢谢!

您的代码似乎有一个错别字,这里

for (int j = n - 1; j >= 0; j++) {
if (patches[j] == ".") {
patches[j] = "H";
break;
}
}

应该

for (int j = n - 1; j >= 0; j--) { // TYPO -- not ++
if (patches[j] == ".") {
patches[j] = "H";
break;
}
}

老实说,我用调试器花了30秒才发现这个问题。

最新更新