当我编译我的代码时,一切都成功编译,但是当我运行我的代码时,我收到了一个"分段错误错误"。导致此错误的原因是什么?据我所知,我已经点了我所有的东西并且划过了我的所有人。
- 我编辑了我的代码以反映一些建议的更改,但仍然得到相同的错误 - 我的代码如下:
#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("%d\n", *even_elt_sum_ptr);
printf("%d\n", *odd_elt_sum_ptr);
}//end of sum function
答案 0 :(得分:2)
您声明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.
答案 1 :(得分:1)
而不是这一行:
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]
写为参数,您的意思是&#34;将a视为数组,将第101个元素作为参数&#34;,因此您给int
而不是{{ 1}}数组)。
此外,第3个和第4个参数已经是指针(声明为int
),通过在将它们作为参数传递时放置一个星号,您实际上取消引用它们,即将int *...
指针指向
这些错误应该由您的编译器指示(实际上,您的编译器应该指示警告,但在C中,如果您不知道自己在做什么,则应该将警告视为与错误相同)。
答案 2 :(得分:1)
对于初学者,您必须在sum
中使用之前声明函数main
。
函数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( "%lld\n", even_elt_sum );
printf( "%lld\n", 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