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

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

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;

}

回答:

您遇到的问题是,如果您使用的是指针而不是固定大小的数组,则需要在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;

}

您还试图在主函数返回的结果,而是主要在C中的返回值是用来表示程序是否无错地终止(返回值为0)或没有遇到任何问题(0以外的任何值)。

回答:

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

此外,虽然有可能从main功能返回result,你不应该这样做。 main的返回值通常用于错误检查。将程序的结尾更改为

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

return 0;

返回0通常表示没有错误发生。

以上是 尝试添加数组元素时出现分段错误 的全部内容, 来源链接: utcz.com/qa/258929.html

回到顶部