我试图创建一个函数,该函数返回数组中元素的总和。当我尝试运行程序时,我遇到了分段错误。有人可以指点我正确的方向吗?谢谢!
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;
}
答案 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以外的任何值)。