执行快速排序代码时出现 GCC 分段错误
GCC Segmentation fault when execute quicksort code
我在用 C
执行自己的快速排序源代码时遇到 "segmentation falut"
在 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;
}
不知道是什么问题..
很多网络搜索结果显示是内存问题..
但我不知道上面代码中的确切问题是什么
请帮忙...
在main
int arr[] = {15,22,13,27,12,10,20,25};
int iLength=sizeof(arr);
这个 iLength
将不包含数组的长度,而是它的大小,即 8*4
(假设 4 bytes
为 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
执行自己的快速排序源代码时遇到 "segmentation falut"在 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;
}
不知道是什么问题..
很多网络搜索结果显示是内存问题..
但我不知道上面代码中的确切问题是什么 请帮忙...
在main
int arr[] = {15,22,13,27,12,10,20,25};
int iLength=sizeof(arr);
这个 iLength
将不包含数组的长度,而是它的大小,即 8*4
(假设 4 bytes
为 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)
.