未知分段故障误差



当我编译代码时,所有内容都会成功编译,但是当我运行代码时,我会收到"分割故障错误"。是什么导致此错误?据我所知,我已经点缀了我所有的我,并越过了我所有的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中,如果您不完全知道自己在做什么,则应考虑与错误相同的警告)。

相关内容

  • 没有找到相关文章

最新更新