尝试编写函数来对数组元素求和时出现分段错误

时间:2018-04-09 04:41:27

标签: c arrays

我已经被困在这个问题上一段时间了,我不知道该如何处理这个问题。

#include <stdio.h>
#include <stdlib.h>
int ItSum(int *array, int array_size);

int main(){
    int array_size, isum, sum;
    printf("\nPlease enter the size of the array:");
    scanf("%d",&array_size);
    int *array;
    array=(int*)malloc(array_size*sizeof(int));
    printf("Please enter the elements of the array:");
    int i;
    for(i=0; i<array_size;i++)
        scanf("%d",&array[i]);
    printf("\nThe elements of the array are:");
    for(i=0; i<array_size; i++)
        printf(" %d", array[i]);

    isum=ItSum(*array,array_size);
    printf("\nThe sum of the elements using iteration is:%d", isum);

    free (array);
    return 0;
}

int ItSum(int *array, int array_size){
    int x, itsum;
    itsum=0;    
    for (x=0;x<array_size;x++)
        itsum+=array[x];
    return itsum;
}

所以这里是我的代码到目前为止,分配是编写一个迭代和递归函数,在20下将五个正整数相加(教授希望我们测试的输入有一堆底片和20以上的整数。但是,当我尝试运行到目前为止我输入数组元素时出现分段错误。我不确定这里到底出了什么问题,所以任何提示或线索都会非常感激。谢谢。

2 个答案:

答案 0 :(得分:1)

问题在编译器警告中公开:

$ cc -Wall test.c
test.c:19:16: warning: incompatible integer to pointer conversion passing 'int' to parameter of type 'int *'; remove *
      [-Wint-conversion]
    isum=ItSum(*array,array_size);
               ^~~~~~
test.c:3:16: note: passing argument to parameter 'array' here
int ItSum(int *array, int array_size);
               ^
test.c:6:27: warning: unused variable 'sum' [-Wunused-variable]
    int array_size, isum, sum;
                      ^

生成了2个警告。

这一行:

isum=ItSum(*array,array_size);

应该是:

isum=ItSum(array,array_size);

答案 1 :(得分:1)

 isum=ItSum(*array,array_size);

在这里你传递*array作为参数,但你应该只传递array,这是一个指向int的指针,因为你的函数将指向int的指针作为参数。 *array引用地址处的值,因此将int作为参数传递,即数组的第一个值。