gogobaba Ответов: 1

Как устранить эту ошибку компиляции


Вам был дан целочисленный массив A размера N. каждый элемент массива находится в диапазоне от 1 до 10^5. Вам нужно найти частоту каждого отдельного элемента массива. Элементы должны присутствовать в выходных данных в порядке возрастания. Вам нужно вывести значение, а затем частоту каждого отдельного элемента.
->I am getting this error
  Command failed: ./a.out <input2.txt
Segmentation fault


Что я уже пробовал:

#include <iostream>
using namespace std;

void InsertionSort(int *arr,int n){
  int key,j=0;
  for(int i=1;i<n;i++){
    key = arr[i];
    j = i-1;
    while(j>=0 && key <arr[j]){
      arr[j+1] = arr[j];
      j = j-1;
    }
    arr[j+1] = key;
  }
}

void FrequencyAndPrint(int *arr,int n){
  int temp;
  int freq ;
  int j=0;
  for(int i=0;i<n;i++){
    temp = arr[i];
    freq = 1;
    for( j=i+1;j<n;j++){
      if(temp == arr[j])
      ++freq;
      else 
        break;
    }
    i = j-1;
    cout<<arr[i]<<" "<<freq<<endl;
  }
  return;
}

int main()
{
	int N;
  int arr[10];
  cin>>N;
  for(int i=0;i<N;i++){
    cin>>arr[i];
  }
  InsertionSort(arr,N);
  FrequencyAndPrint(arr,N);

	return 0;
}

Mohibur Rashid

вы пробовали делать отладку? Ваше целое число имеет фиксированную длину; Если ваше N>10, то вы получите ошибку сегментации. И если вы пытаетесь реализовать сортировку вставки, вы делаете это неправильно.

С помощью insertion short вы сортируете во время вставки, то есть когда ваш цикл for читает, вы делаете сортировку

gogobaba

да, я пробовал отлаживать.Не могли бы вы пояснить, почему сортировка вставки неправильна в этой ситуации?

CHill60

Мохибур Рашид не будет знать, что вы ответили на их комментарий, потому что вы не использовали ссылку "ответить"

1 Ответов

Рейтинг:
5

Richard MacCutchan

Вы используете фиксированный массив, поэтому если N больше 10, то результатом, скорее всего, будет ошибка SEGV. Вы должны выделить массив с помощью new утверждение после того, как вы впервые приняли значение N. Что-то вроде:

int N;

cin >> N;
int* arr = new int[N];
for(int i=0; i < N; i++)
{
    cin >> arr[i];
}

Вам также необходимо проверить содержимое вашего входного файла, чтобы убедиться, что он содержит правильные данные.