调用整数并使用函数向用户输入崩溃添加数字的程序

时间:2015-04-08 16:08:29

标签: c arrays pointers

好吧所以我试图让我的程序询问用户整数(一切正常)然后调用函数,每个数组元素增加5,我认为没问题?然后我需要在主程序中打印:添加了5的原始整数。有谁看到了什么问题?我的程序崩溃了

#include <stdio.h>

void FUN(int ARR2[]);

int main()
{
  int i=0;
  int ARR1[20];
  printf("Please enter 20 integers.\n");

  for(i=0; i<20; i++) // switch back to 20
  {
    scanf("%i", &ARR1[i]);
  }

  FUN(&ARR1[i]);
  printf("The new numbers are: %i", ARR1[i]);

  return 0;
}

void FUN(int ARR2[])
{
    int i=0;
    ARR2[20];

    for(i=0;i<20;i++)
        ARR2[i]+=5;
}

2 个答案:

答案 0 :(得分:1)

当你到达这一行

FUN(&ARR1[i]);

您的i变量的值为20,因此您正在访问ARR中的第21个元素,这可能会导致访问冲突。如果用

替换此行
FUN(ARR1);

并删除该行

ARR2[20];
从您的函数FUN

您可能会得到您期望的行为

答案 1 :(得分:1)

在第一次for循环后,i得到的值为20,但ARR1的索引为019。因此,当您调用

时,可能会出现Segmentation Fault
FUN(&ARR1[i]);

您应该将其更改为

FUN(ARR1);

此外,在您的函数void FUN(int ARR2[])中,您有

ARR2[20];

这也会导致此错误。删除它。

您也以错误的方式提供输出。你在做什么

printf("The new numbers are: %i", ARR1[i]);

也试图访问ARR1[20],再次造成问题。

您应该将其更改为

  printf("The new numbers are: \n");
  for ( i=0 ; i < 20 ; i++)
     printf("%d\n", ARR1[i]);

您应该将代码更改为

#include <stdio.h>

void FUN(int ARR2[]);

int main()
{
  int i=0;
  int ARR1[20];
  printf("Please enter 20 integers.\n");

  for(i=0; i<20; i++) // switch back to 20
  {
    scanf("%i", &ARR1[i]);
  }

  FUN(ARR1);
  printf("The new numbers are: \n");
  for ( i=0 ; i < 20 ; i++)
     printf("%d\n", ARR1[i]);

  return 0;
}

void FUN(int ARR2[])
{
    int i=0;

    for(i=0;i<20;i++)
        ARR2[i]+=5;
}