C中的未知分段错误错误

时间:2017-11-30 23:00:59

标签: c segmentation-fault

当我编译我的代码时,一切都成功编译,但是当我运行我的代码时,我收到了一个"分段错误错误"。导致此错误的原因是什么?据我所知,我已经点了我所有的东西并且划过了我的所有人。

- 我编辑了我的代码以反映一些建议的更改,但仍然得到相同的错误 - 我的代码如下:

#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

3 个答案:

答案 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