В чем проблема с этим входом? Я получаю ошибку сегментации (ядро сброшено) в этой программе - PullRequest
0 голосов
/ 30 марта 2020

В этой программе я получаю ошибку сегментации. Если я закомментирую последний for -l oop (который просто возвращает входные параметры), программа будет работать отлично, также, если я закомментирую другой for-l oop (с abs чисел), программа все равно будет работать отлично. Так, может быть, последние два цикла вместе создают некоторые проблемы?

Заранее спасибо

#include <stdio.h>

void abs_numbers(int size, int v[], int v2[]) {
  for (int i = 0; i < size; ++i) {
    v2[i] = v[i];
    if (v2[i] < 0) {
      v2[i] = v[i] * (-1);
    }
  }
}

int main() {
  int size;
  int numbers[size];
  int numbers2[size];

  printf("Size of numbers: \n");
  scanf("%d", & size);

  for (int i = 0; i < size; ++i) {
    printf("%d. number: ", i + 1);
    scanf("%d", & numbers[i]);
  }

  abs_numbers(size, numbers, numbers2);

  printf("Abs of numbers");

  for (int k = 0; k < size; ++k) {
    printf("%d", numbers2[k]);
    if (k < size - 1) {
      printf(", ");
    }
  }
  puts("");

  printf("Numbers: ");

  for (int l = 0; l < size; ++l) {
    printf("%d", numbers[l]);
    if (l < size - 1) {
      printf(", ");
    }
  }
  puts("");

  return 0;
}

1 Ответ

1 голос
/ 30 марта 2020

Размер массива, цифр и цифр2, должен быть постоянной времени компиляции. Вы можете установить размер обоих массивов, если вы можете определить их максимальный размер следующим образом.

int numbers[16];
int numbers2[32];

Однако вы должны динамически распределять память, если вы не можете определить максимальный размер или если вы не можете хотите тратить память, которая требует динамического выделения c, например,

int* numbers=malloc(sizeof(int)*16);
int* numbers=malloc(sizeof(int)*32);

Не забудьте освободить память, выделенную вами с помощью free ().

...