将数组作为参数传递是否会导致分段错误?

问题描述 投票:0回答:1

这是一个简单的程序,用于查找数组的最小元素。但是以下程序的先前版本给出了一个错误,其中最小和最大数字显示为 0。在该程序的以下版本中,编译器给出了分段错误。

#include <stdio.h>
void minimum();
void maximum();
int n;
int main()
{
     
    int array[n];
    printf("Enter the size of your array:\n");
    scanf("%d", &n);
    printf("Enter the elements of your array:\n");
    for (int i = 0; i < n; i++)
    {
        printf("Enter element %d:\n", i + 1);
        scanf("%d", array);
    }
    minimum(array[n]);
    maximum(array[n]);
    return 0;
}
void minimum(int arr[n])
{
    int* min;
    min = &arr[0];  // Initialize min to the value of the first element of the array
    for (int i = 1; i < n; i++)
    {
        if (*(arr+i)<*min)
        {
            *min = *(arr+i);
        }
    }
    printf("The smallest element in the array is: %d\n", *min);
}

void maximum(int arr[n])
{
    int* max;
    max =  &arr[0];  // Initialize min to the value of the first element of the array
    for (int i = 1; i < n; i++)
    {
        if (*(arr+i)>*max)
        {
            *max = *(arr+i);
        }
    }
    printf("The greatest element in the array is: %d\n", *max);
}

在这个程序的早期版本中,我尝试将两个参数传递给函数声明,第一个只有一个 int*,第二个只有一个 int* 和一个 int,这两个参数都导致最小和最大数字都是 0,尽管它应该有是其他一些数字。我还尝试将最小值和最大值与数组指针一起传递给函数,例如

void min(int*, int*);
这也给出了 nim 和 max 都等于 0 的输出。

#include <stdio.h>
void minimum(int *, int);
void maximum(int *, int);
int main()
{
    int n; 
    int array[100];
    printf("Enter the size of your array:\n");
    scanf("%d", &n);
    printf("Enter the elements of your array:\n");
    for (int i = 0; i < n; i++)
    {
        printf("Enter element %d:\n", i + 1);
        scanf("%d", array);
    }
    minimum(array, n);
    maximum(array, n);
    return 0;
}
void minimum(int *arr, int n)
{
    int *min = &arr[0];  // Initialize min to the value of the first element of the array
    for (int i = 1; i < n; i++)
    {
        if (*(arr+i)<*min)
        {
            *min = *(arr+i);
        }
    }
    printf("The smallest element in the array is: %d\n", *min);
}

void maximum(int *arr, int n)
{
    int *max = &arr[0];  // Initialize min to the value of the first element of the array
    for (int i = 1; i < n; i++)
    {
        if (*(arr+i)>*max)
        {
            *max = *(arr+i);
        }
    }
    printf("The greatest element in the array is: %d\n", *max);
}

arrays c function pointers
1个回答
0
投票
minimum(array[n]);

您不只向数组传递数组的单个元素,它的 id 过程会调用未定义的行为。

  • 第一个是您访问其边界之外的
    array
    ,因为索引是从
    0
    n - 1
  • 然后将转换后的整数值传递给指针。在代码中取消引用它,这是另一个未定义的行为。
© www.soinside.com 2019 - 2024. All rights reserved.