当我编译代码时,所有内容都会成功编译,但是当我运行代码时,我会收到"分割故障错误"。是什么导致此错误?据我所知,我已经点缀了我所有的我,并越过了我所有的t。
- 我编辑了我的代码以反映一些建议的更改,但仍然会遇到相同的错误 - 我的代码如下:
#include <stdio.h>
int main(void)
{
int a[100];
int n = 0;
int i = 0;
int *even_elt_sum_ptr = 0;
int *odd_elt_sum_ptr = 0;
printf("Enter size of array: ");
scanf("%d", &n);
printf("Enter elements in array: ");
for(i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}//end of for loop
sum(a, n, even_elt_sum_ptr, odd_elt_sum_ptr);
}//end of main
int sum(int a[], int n, int *even_elt_sum_ptr, int *odd_elt_sum_ptr)
{
int i = 0;
for(i = 0; i < n; i++)
{
if (a[i] % 2 == 0)
{
*even_elt_sum_ptr += a[i];
}//end of if statement
else
{
*odd_elt_sum_ptr += a[i];
}//end of else statement
}//end of for loop
printf("%dn", *even_elt_sum_ptr);
printf("%dn", *odd_elt_sum_ptr);
}//end of sum function
您声明了 sum
-函数以获取一个名为 a
的整数。
但是,当您调用该函数时,您只是传递一个整数,而在此函数无效!
int a[100]; // Declare an array: valid indicies are [0] to [99]
sum(a[100], .... ); // Try to pass the single integer, a[100], which is not valid!
int sum(int a[], ... ) // The function expects an ARRAY, not a single, undefined value.
对于初学者,您必须在使用 main
之前声明函数 sum
。
该函数sum
被声明为具有返回类型int
,但什么都不返回。
数组
int values[10];
在程序中不使用。此外,这个语句
values[10] = values[n];
没有意义。看来您正在尝试重新定义此语句中的数组,但是数组没有分配运算符,并且可能无法重新定义。
这些声明
int *even_elt_sum_ptr = 0;
int *odd_elt_sum_ptr = 0;
也没有意义。您应该至少声明int
类型的对象
int even_elt_sum = 0;
int odd_elt_sum = 0;
并通过引用将它们传递到函数sum
,例如
sum(a, n, &even_elt_sum, &odd_elt_sum);
看来您的意思是以下
#include <stdio.h>
#define N 100
void sum( const int a[], size_t n, long long int *even_elt_sum_ptr, long long int *odd_elt_sum_ptr);
int main(void)
{
int a[N];
long long int even_elt_sum;
long long int odd_elt_sum;
size_t n = N;
printf( "Enter size of array (no more than %zu): ", ( size_t )N );
scanf( "%zu", &n);
if ( n == 0 || N < n ) n = N;
printf( "Enter %zu elements in array: ", n );
for ( size_t i = 0; i < n; i++ )
{
scanf("%d", &a[i]);
}//end of for loop
sum( a, n, &even_elt_sum, &odd_elt_sum );
printf( "%lldn", even_elt_sum );
printf( "%lldn", odd_elt_sum );
}//end of main method for problem 4
void sum( const int a[], size_t n, long long int *even_elt_sum_ptr, long long int *odd_elt_sum_ptr )
{
*even_elt_sum_ptr = 0;
*odd_elt_sum_ptr = 0;
for ( size_t i = 0; i < n; i++ )
{
if ( a[i] % 2 == 0 )
{
*even_elt_sum_ptr += a[i];
}//end of if statement
else
{
*odd_elt_sum_ptr += a[i];
}//end of else statement
}//end of for loop
}//end of sum function
程序输出可能看起来像
Enter size of array (no more than 100 ): 10
Enter 10 elements in array: 0 1 2 3 4 5 6 7 8 9
20
25
而不是此行:
sum(a[100], n, *even_elt_sum_ptr, *odd_elt_sum_ptr);
您应该写这一行:
sum(a, n, even_elt_sum_ptr, odd_elt_sum_ptr);
a
已经是一个数组(您写了int a[100]
)。通过将a[100]
写为参数,您的意思是"将一个数组视为数组,以第101个元素作为参数",因此您给出int
而不是int
数组)。
另外,第三和第四参数已经是指数(称为int *...
),通过将恒星作为参数传递时,您实际上是解释了恒星,即以int
为例,指针指向。
这些错误应由您的编译器指示(实际上,编译器应表示警告,但是在C中,如果您不完全知道自己在做什么,则应考虑与错误相同的警告)。
。