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
传递给函数即可。