首页 > 解决方案 > 这个输入有什么问题?我在这个程序中遇到分段错误(核心转储)

问题描述

在这个程序中,我遇到了分段错误。如果我注释掉最后一个 for 循环(它只返回输入参数)程序运行完美,同样如果我注释另一个 for 循环(带有数字的 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;
}

标签: cloopsfor-loopsegmentation-fault

解决方案


数组的大小,numbers 和 numbers2,必须是编译时常量。如果您可以像这样确定它们的最大大小,则可以设置两个数组的大小。

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

但是,如果您无法确定最大大小或者您不想浪费内存,则应该动态分配内存,这需要像这样的动态分配,

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

不要忘记释放您使用 free() 分配的内存。


推荐阅读