gpt4 book ai didi

c - a.exe 已停止运行快速排序程序

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

我编写了以下快速排序算法的实现。我无法猜测为什么以下代码片段不起作用(编译良好但无法在运行时运行 a.exe 已停止工作)。如果有人你可以在这方面帮助我:

main( )
{
int a[ ]={9,2,3,1,6,5,6,3,2,9,8,1,4,5,5,6,5,99};
quicksort(a,0,17);
print(a,18);

}

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

void swap(int a[ ],int left,int right)
{
int t;
t=a[left];
a[left]=a[right];
a[right]=t;
}

void quicksort(int a[ ],int left,int right)
{
int i,last;
if ( left >= right)
return;
swap(a,left,(last+right)/2);
last=left;
for (i=last+1;i<=right;i++)
if (a[i] < a[left])
swap(a,++last,i);
swap(a,left,last);
quicksort(a,left,last-1);
quicksort(a,last+1,right);

}

最佳答案

问题就在这里:

void quicksort(int a[ ],int left,int right)
{
int i,last;
if ( left >= right)
return;
swap(a,left,(last+right)/2);
^^^^

last 尚未初始化,但您将其用作 right 的补充。

您是指(left+right)/2吗?

我的编译器不仅警告我(始终启用警告),而且我进一步使用调试器来仔细检查情况确实如此。

编译器警告:

23:22:警告:在此函数中可能会使用未初始化的“last”[-Wuninitialized]

调试器输出:

Breakpoint 2, main () at quicksortbroken.c:37
37 int a[ ]={9,2,3,1,6,5,6,3,2,9,8,1,4,5,5,6,5,99};
(gdb) n // go to the next line
38 quicksort(a, 0, 17);
(gdb) s // step into the function
quicksort (a=0xbffff6d8, left=0, right=17) at quicksortbroken.c:21
21 if ( left >= right)
(gdb) n
23 swap(a,left,(last+right)/2); // okay, let's examine the variable I suspect is problematic
(gdb) p last // print the value of last
$1 = 1872329 // Oh, oh, definitely not supposed to be this value

这是在 Linux 下使用 GDB,不确定你是如何编译代码的,但我很确定 Cygwin 附带了 GDB 的 Windows 端口,微软也有自己的调试器。没有理由不使用它。

关于c - a.exe 已停止运行快速排序程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17183312/

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