Quicksort C - 分段错误
Quicksort C - Segmentation fault
我制作了一个链表。现在我想进行快速排序,但出现分段错误并且无法找到问题所在。
Invalid read of size 8
at 0x400659: quicksort (liiista.c:23)
by 0x4008FE: main (liiista.c:117)
Address 0x0 is not stack'd, malloc'd or (recently) free'd
第 23 行如下:
while( (strcmp(arr[left]->ele,arr[pivot]->ele) <= 0) && left < end)
我post插入、主函数和快速排序函数的代码。
typedef struct celda{
char* ele;
struct celda *next;
}*tList;
void quicksort(tLista *arr, int begin, int end){
char* temp;
int left, right, pivot;
if(begin < end){
pivot = begin;
left = begin;
right = end;
while(left < right){
while( (strcmp(arr[left]->ele,arr[pivot]->ele) <= 0) && left < end) {
left++;
}
while( (strcmp( arr[right]->ele, arr[pivot]->ele) > 0)){
right--;
}
if(left<right){
temp = arr[left]->ele;
arr[left]->ele = arr[right]->ele;
arr[right]->ele = temp;
}
}
temp = arr[pivot]->ele;
arr[pivot]->ele = arr[right]->ele;
arr[right]->ele = temp;
quicksort(&(*arr),begin,right-1);
quicksort(&(*arr),left+1, end);
}
}
void insert(tList *myList, char* ele){
tList node = (tList)malloc(sizeof(struct celda));
node->ele = ele;
node->next = *myList;
*myList = node;
}
int main(){
tList myList = NULL;
insert(&myList,"a");
insert(&myList,"b");
insert(&myList,"c");
insert(&myList,"d");
insert(&myList,"e");
quicksort(&myList,0,4);
return 1;
}
我试图找出错误,但我找不到。
提前致谢!
在您的 quicksort
函数中,它期望传递一个指向 struct celda
的指针数组,但是您传递的是链表中第一个节点的地址。你不能像那样混淆数据结构。
我制作了一个链表。现在我想进行快速排序,但出现分段错误并且无法找到问题所在。
Invalid read of size 8
at 0x400659: quicksort (liiista.c:23)
by 0x4008FE: main (liiista.c:117)
Address 0x0 is not stack'd, malloc'd or (recently) free'd
第 23 行如下:
while( (strcmp(arr[left]->ele,arr[pivot]->ele) <= 0) && left < end)
我post插入、主函数和快速排序函数的代码。
typedef struct celda{
char* ele;
struct celda *next;
}*tList;
void quicksort(tLista *arr, int begin, int end){
char* temp;
int left, right, pivot;
if(begin < end){
pivot = begin;
left = begin;
right = end;
while(left < right){
while( (strcmp(arr[left]->ele,arr[pivot]->ele) <= 0) && left < end) {
left++;
}
while( (strcmp( arr[right]->ele, arr[pivot]->ele) > 0)){
right--;
}
if(left<right){
temp = arr[left]->ele;
arr[left]->ele = arr[right]->ele;
arr[right]->ele = temp;
}
}
temp = arr[pivot]->ele;
arr[pivot]->ele = arr[right]->ele;
arr[right]->ele = temp;
quicksort(&(*arr),begin,right-1);
quicksort(&(*arr),left+1, end);
}
}
void insert(tList *myList, char* ele){
tList node = (tList)malloc(sizeof(struct celda));
node->ele = ele;
node->next = *myList;
*myList = node;
}
int main(){
tList myList = NULL;
insert(&myList,"a");
insert(&myList,"b");
insert(&myList,"c");
insert(&myList,"d");
insert(&myList,"e");
quicksort(&myList,0,4);
return 1;
}
我试图找出错误,但我找不到。 提前致谢!
在您的 quicksort
函数中,它期望传递一个指向 struct celda
的指针数组,但是您传递的是链表中第一个节点的地址。你不能像那样混淆数据结构。