Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么我的代码会产生分段错误?_C_Segmentation Fault - Fatal编程技术网

C 为什么我的代码会产生分段错误?

C 为什么我的代码会产生分段错误?,c,segmentation-fault,C,Segmentation Fault,因此,我正在编写一个程序,该程序将指针指向一个数组和数组的大小(数组中的元素数) 作为参数,查找异常值索引的位置,将数组固定到位(即将异常值放置到 并返回发现异常值的旧索引。我完成了我的代码,但出于某种原因,在我的主函数的某个地方,它告诉我有一个分段错误,我知道它在我的主函数中,因为它编译并运行良好,而它只是原始代码。这是代码 #include <stdio.h> long long int fix_sorted_array(double* arr, unsigned long n

因此,我正在编写一个程序,该程序将指针指向一个数组和数组的大小(数组中的元素数) 作为参数,查找异常值索引的位置,将数组固定到位(即将异常值放置到 并返回发现异常值的旧索引。我完成了我的代码,但出于某种原因,在我的主函数的某个地方,它告诉我有一个分段错误,我知道它在我的主函数中,因为它编译并运行良好,而它只是原始代码。这是代码

#include <stdio.h>

long long int fix_sorted_array(double* arr, unsigned long n)
{
    double temp;
    int i, j;
    for ( i = 0; i < n - 1; i ++)
    {
        if (arr[i] > arr[i + 1])
        {
            for ( j = i + 1; j > 0; j --)
            {
                if (arr[j] < arr[j-1])
                {
                    temp = arr[j];
                    arr[j] = arr[j-1];
                    arr[j-1] = temp;
                }
            }
            return i + 1;
        }
    }
    return -1;
}

int main()
{
    int n;
    int j;//declared variables
    double arr[n];
    printf("Enter elements of array : \n");
    for ( int i = 0; i < n; i ++)
    {
        scanf("%lf", &arr[i]);
    }
    printf("Return index : %lld\n",fix_sorted_array (&arr[n], n));
    printf("Array after : \n");
    for ( j = 0; j < n; j ++)
    {
        printf("%.2lf", arr[j]);
    }
}
#包括
长整型固定排序数组(双*arr,无符号长n)
{
双温;
int i,j;
对于(i=0;iarr[i+1])
{
对于(j=i+1;j>0;j--)
{
if(arr[j]
您正在将数组外的地址传递给此行中的函数:

    printf("Return index : %lld\n",fix_sorted_array (&arr[n], n));
您希望传递数组开始的地址,而不是结束的地址,因此它应该是:

    printf("Return index : %lld\n",fix_sorted_array (arr, n));
在声明数组之前,还需要初始化
n

printf("How many numbers? ");
scanf("%d", &n);
double arr[n];

您从未接受过
n
的值。下面的代码可能会有所帮助

#include <stdio.h>

long long int fix_sorted_array(double* arr, unsigned long n)
{
double temp;

int i, j;

for ( i = 0; i < n - 1; i ++)
{

    if (arr[i] > arr[i + 1])
    {

        for ( j = i + 1; j > 0; j --)
        {

            if (arr[j] < arr[j-1])
            {

                temp = arr[j];

                arr[j] = arr[j-1];

                arr[j-1] = temp;
            }
        }

    return i + 1;
    }
}

return -1;
}



int main()
{
int n;

int j;//declared variables

printf("Enter the number of elements in arrays");
scanf("%d",&n); // initialize the values of n

double arr[n];


printf("Enter elements of array : \n");

for ( int i = 0; i < n; i ++)
{

    scanf("%lf", &arr[i]);
}

printf("Return index : %lld\n",fix_sorted_array (&arr[0], n)); // Also pass the value of starting index in array i.e. `arr[0]`

printf("Array after : \n");

for ( j = 0; j < n; j ++)
{
    printf("%.2lf", arr[j]);
}

}

#包括
长整型固定排序数组(双*arr,无符号长n)
{
双温;
int i,j;
对于(i=0;iarr[i+1])
{
对于(j=i+1;j>0;j--)
{
if(arr[j]
您从未初始化过
n
&arr[n]
是数组末尾后面的地址。您只需将
arr
传递给函数即可。