处理分段错误

时间:2016-04-23 05:18:49

标签: c++ segmentation-fault

我正在尝试解决CodeChef问题。每当我运行它时,我都会遇到分段错误。这是问题的链接:enter image description here

这是我的代码:

#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;
    }
}

2 个答案:

答案 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);