获取分段错误错误C ++

时间:2014-08-27 18:37:27

标签: c++

我正在学习C ++并试图解决编程挑战中的问题。我被困在解决快乐的跳投。为了达到目的,我的程序运行但是在输入第一行并获得输出之后,出现了分段错误。这是我的代码:

  #include <iostream>
  #include <cmath>

  using namespace std;

  bool is_jolly(int *list, int cap, bool* container){
      int difference = 0;
      for(int i=0; i<cap-1; i++){
          difference = list[i] - list[i+1];
          if(abs(difference) < cap && abs(difference) >= 1 && container[difference] == false){
            container[difference] = true;
            continue;
          }
          else return false; 
      }
      return true;
  }

  int main(){
  int n;
  bool used[30001];
  while(cin >> n){

        int * num_list = new int[n];
        for(int i=0; i<n; i++){
              cin >> num_list[i];
              used[i+1] = false;
        }
        if(is_jolly(num_list,n,used))
                cout << "Jolly" << endl;
        else    cout << "Not Jolly" << endl;

        delete[] num_list;
     }

    return 0;
   }

1 个答案:

答案 0 :(得分:3)

如果差异可能为负(例如,在输入2 0 10000上),则container[difference]使用否定索引(例如container[-10000]),这将导致段错误

  for(int i=0; i<cap-1; i++){
      difference = list[i] - list[i+1];
      if(abs(difference) < cap && abs(difference) >= 1 && container[difference] == false){

而是使用:

  for(int i=0; i<cap-1; i++){
      difference = abs(list[i] - list[i+1]);
      if(difference < cap && difference >= 1 && container[difference] == false) {

....如果那是你想要的(我不知道目的是什么)