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