c - 执行快速排序代码时 GCC 段错误

标签 c gcc segmentation-fault quicksort

我在用 C 执行我自己的快速排序源代码时遇到“分段故障”

在 gcc 版本 4.4.3 和 ubuntu 13 中

代码如下所示

#include<stdio.h>

void Quicksort(int arr[], int start, int end);
void swap(int *a, int *b);

void main(void){
int arr[] = {15,22,13,27,12,10,20,25};
int iLength=sizeof(arr);

Quicksort(arr, 0, iLength-1);

for(int i=0;i<iLength;++i)
printf("%d", arr[i]);
}


void Quicksort(int arr[], int start, int end)
{
int left = start;
int right = end;

if((end-start)>=1)
{
int pivot = arr[start];
while(right>left)
{
while((arr[left]<=pivot)&&(left<=end)&&(right>left))//Limit check array size
left++;

while((arr[right]>pivot)&&(right>=start)&&(right>=left))
right--;

if(right>left)
swap(&arr[left], &arr[right]);
}//end while

swap(&arr[left], &arr[right]);
Quicksort(arr, start, right-1);
Quicksort(arr, right+1, end);
}//end if
else
{
return;
}
}//end Quicksort

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

不知道问题出在哪里。

许多网络搜索结果表明这是内存问题..

但我不知道上面代码中的确切问题是什么 请帮忙...

最佳答案

int arr[] = {15,22,13,27,12,10,20,25};
int iLength=sizeof(arr); 

iLength将不包含数组的长度,而是包含其大小,即8*4(假设4字节作为的大小>int)= 32

如果您在函数中发送此内容并稍后在循环中使用 -

for(int i=0;i<iLength;++i)
printf("%d", arr[i]);

这将访问索引越界(幸运的是,您遇到了段错误)。

要计算数组的长度,你可以这样做 -

int iLength = sizeof arr/sizeof(int);

然后使用它。

注意 - void main(void) -> int main(void)int main(int argc,char **argv) .

关于c - 执行快速排序代码时 GCC 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33328313/

相关文章:

c - 在 Cygwin 中找不到库

正确的 kill syscall linux 使用模式

编译一个 C 项目和两个库

c++ - 指针段错误问题

python - 在 Python ctypes 中加载共享库期间出现段错误(核心已转储)

c - 分段故障核心转储: Function that returns the next prime number

C 中嵌套 if else else if 的条件语句

c - 如何在C中扫描多维数组的一维?

c++ - 为什么 GCC 认为模板参数是 int 而它是完全不同的类型?

c - 抑制 R 中的 C 警告消息