我正在尝试解决CodeChef问题。每当我运行它时,我都会遇到分段错误。这是问题的链接:
这是我的代码:
#include<iostream>
#include<cstring>
#include<algorithm>
int main(){
std::string balloonColors;
size_t numberOfAmber;
size_t numberOfBrass;
int t;
int results[t];
std::cin >> t;
for (int i = 0; i < t; i++){
int result = 0;
std::cin >> balloonColors;
numberOfAmber = std::count(balloonColors.begin(), balloonColors.end(), 'a');
numberOfBrass = std::count(balloonColors.begin(), balloonColors.end(), 'b');
if (numberOfAmber == 0 || numberOfBrass == 0){
result = 0;
}
if (numberOfAmber <= numberOfBrass){
result = (int)numberOfAmber;
}
else {
result = (int)numberOfBrass;
}
results[i] = result;
}
for (int x = 0; x < t; x++){
std::cout << results[x] << std::endl;
}
}
答案 0 :(得分:0)
这些问题是:
int t;
int results[t];
您使用未初始化的变量results
声明t
。未初始化的变量具有 indeterminate 值,在初始化之前使用它会导致未定义的行为。
您应该在此处使用std::vector
,并在获得用户的实际尺寸后设置其尺寸:
int t;
std::vector<int> results;
std::cin >> t;
results.resize(t);
答案 1 :(得分:0)
C ++中的数组需要有固定的大小。您定义了results
,其大小为t
,但未修复。
要使用动态尺寸,请改用std::vector
:
#include <vector>
...
int t;
std::cin >> t;
std::vector<int> results (t);