尝试添加数组元素时出现分段错误

时间:2017-12-03 00:05:06

标签: c arrays function pointers

我试图创建一个函数,该函数返回数组中元素的总和。当我尝试运行程序时,我遇到了分段错误。有人可以指点我正确的方向吗?谢谢!

int arraySum (int array[], int numberOfElements) {
int result = 0;

for (int i = 0; i < numberOfElements; i++)
{
    result += array[i];
}

return result;
}

int main (void) {
int numberOfElements;
int *array = NULL;

printf("How many elements would you like in your array: ");
scanf("%i", &numberOfElements);

printf("\nPlease list the values of the elements in the array: ");

for (int i = 0; i < numberOfElements; i++)
{
    scanf("%i", &array[i]);
}

int result = arraySum(array, numberOfElements);

return result;
}

2 个答案:

答案 0 :(得分:0)

你需要分配内存。仅仅声明一个指针是不够的。你这样做:array=malloc(numberOfElements*sizeof(*array));

此外,尽管可以从result函数返回main,但您不应该这样做。 main的返回值通常用于错误检查。将程序结束更改为

printf("Sum: %d\n", result);
return 0; 

返回0通常意味着没有发生错误。

答案 1 :(得分:0)

你遇到的问题是,在C中你需要手动分配内存,如果你使用指针而不是说固定大小的数组。

这通常是通过调用malloc来完成的,它将返回一个void-pointer(void *),你需要在赋值之前将其转换为所需的类型(在你的情况下为(int *))。

还需要注意的是,使用malloc时,需要指定要分配的字节数。这意味着您不能仅使用要存储的整数来调用它,而是必须将该数字乘以一个整数占用的字节数(这取决于您使用的硬件和操作系统,因此你应该为此目的使用sizeof(int),它在编译时计算到那个大小。)

我修改了你的代码,并举例说明了如何完成:

#include <stdio.h>
#include <stdlib.h>


int arraySum (int array[], int numberOfElements) {
    int result = 0;

    int i;
    for (i = 0; i < numberOfElements; i++) {
        result += array[i];
    }

    return result;
}

int main(int argc, char **argv) {
    int numberOfElements;
    int *array = NULL;

    printf("How many elements would you like in your array: ");
    scanf("%i", &numberOfElements);

    array = (int*) malloc(numberOfElements * sizeof(int));

    printf("\nPlease list the values of the elements in the array: ");

    int i;
    for (i = 0; i < numberOfElements; i++) {
        scanf("%i", &array[i]);
    }

    int result = arraySum(array, numberOfElements);

    printf("\n\nThe result is: %d\n", result);

    return 0;
}

您也尝试在main函数中返回结果,但是C中main的返回值用于表示程序是否终止而没有错误(由返回值0表示)或者没有遇到任何问题(0以外的任何值)。