gpt4 book ai didi

c - C语言中使用指针进行冒泡排序

转载 作者:行者123 更新时间:2023-11-30 20:24:35 25 4
gpt4 key购买 nike

我尝试编写一个使用指针进行冒泡排序的代码。它没有给我任何错误,但结果会生成随机数字或“段错误”消息。您能检查一下我的代码并指出我哪里出错了吗?

#include <stdio.h>

int * input(int n);
void print(int *ptr, int n);
int * bubble_sort(int *ptr, int n);
void swap(int *a,int *b);

int main(){
int n;

printf("Enter the number of the elements to be sorted:\n");
scanf("%d",&n);


int *ptr;
ptr = input(n);
print(ptr,n);

int *ptr_sort;

ptr_sort = bubble_sort(ptr,n);
// bubble_sort(ptr,n);
print(ptr_sort,n);
// print(ptr,n);

return 0;
}

int * input(int n){
int i;
int array[n];

int *ptr;

ptr = array;


for(i=0;i<n;i++){
printf("Enter element %d value: \n", i+1);
scanf("%d",ptr+i);
}

return ptr;
}

void print(int *ptr, int n){
int i;
for(i=0;i<n;i++)
printf("%d\t",*(ptr+i));
printf("\n");
}

int * bubble_sort(int *ptr, int n){
int i,j;

for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
if(*(ptr+j)>*(ptr+j+1))
swap((ptr+j),(ptr+j+1));

return ptr;
}

void swap(int *a,int *b){
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}

我尝试使用 valgrid 进行一些调试(我不太熟悉),在第一次打印完成后我收到了以下信息:

==2318== Conditional jump or move depends on uninitialised value(s)
==2318== at 0x400803: bubble_sort (ex18_buble_sort.c:58)
==2318== by 0x40065D: main (ex18_buble_sort.c:21)
==2318==
==2318== Invalid write of size 4
==2318== at 0x40088F: swap (ex18_buble_sort.c:68)
==2318== by 0x40083B: bubble_sort (ex18_buble_sort.c:59)
==2318== by 0x40065D: main (ex18_buble_sort.c:21)
==2318== Address 0xf0000000f is not stack'd, malloc'd or (recently) free'd

此后还有很多其他消息,但我想一切都从这里开始。所以问题很可能出在 bubble_sort 函数的某个地方。

请帮忙!

最佳答案

乍一看,我发现您的代码有两个问题:

        int array[n];

那是一个本地数组。您必须在输入函数之外声明该数组才能继续从其他函数使用它。

其次,在您的冒泡排序函数中,您在定义的数组之外进行比较(如果您实际定义它,目前没有任何内容,因此它指向垃圾并且仅适用于垃圾)

关于c - C语言中使用指针进行冒泡排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33103712/

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