gpt4 book ai didi

c - 为什么这段代码会给我段错误?

转载 作者:行者123 更新时间:2023-11-30 18:33:50 26 4
gpt4 key购买 nike

我是 C 新手,试图让用户输入的数组升序排列并打印它。我正在尝试为此使用选择排序。我的 devcpp 在接受第一个输入后崩溃,当我尝试在在线 c 编译器上运行它时,它给出段错误。有人能告诉我为什么这里会发生这种情况吗? TIA

#include<stdio.h>

void swap()
{
int *x, *y;
int temp = *x;
*x = *y;
*y = temp;
}

void ss(int A[], int n)
{
int i, j, min;
for(i=0; i<n-1;i++)
{
min = i;
for(j=i+1; j<n; j++)
{
if (A[j]< A[min])
{
min = j;
}
swap(&A[min], &A[i]);
}
}
}

void print(int A[], int n)
{
int i;
for(i=0; i<n; i++)
{
printf("%d",A[i]);
}
}

int main()
{
int A[4], i, n;
printf("Enter the elements");
scanf("%d", &A[i]);
n=4;
ss(A,n);
printf("Sorted array \n");
print(A,n);
return 0;

}

我希望用户按升序输入数组。

最佳答案

您的 swap() 函数没有参数,并且指针 xy 没有指向任何事物。您的段错误来自以下语句:

int temp = *x;

因为 *x 没有确定的值,所以您没有为程序中任何现有值的 x 分配地址,但您试图在此处间接寻址它。

相反,将参数放入交换函数中:

void swap(int* x, int* y)
{
int temp = *x;
*x = *y;
*y = temp;
}

然后在外部作用域中,将堆栈地址上正确的现有值传递给此 swap 函数。

关于c - 为什么这段代码会给我段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54566622/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com