c-为什么我的代码会产生分段错误



因此,我正在处理这个程序,该程序应该将指针指向数组和数组的大小(数组中的元素数(作为自变量,找到异常值的索引所在的位置,将数组固定在适当的位置(即将异常值放在它应该在哪里(,并返回发现异常值的旧索引。我完成了我的代码,但出于某种原因,在我的主函数中的某个地方,它告诉我存在分段错误,我知道它在我的主要函数中,因为它只是原始代码时编译和运行良好。这里是代码;

#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 : %lldn",fix_sorted_array (&arr[n], n));
printf("Array after : n");
for ( j = 0; j < n; j ++)
{
printf("%.2lf", arr[j]);
}
}

您正在将数组外的地址传递给此行中的函数:

printf("Return index : %lldn",fix_sorted_array (&arr[n], n));

您想要传递数组的起始地址,而不是结束地址,所以它应该是:

printf("Return index : %lldn",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 : %lldn",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]);
}
}

相关内容

  • 没有找到相关文章

最新更新