c - Quicksort C - 段错误

标签 c pointers segmentation-fault quicksort

我制作了一个链表。现在我想进行快速排序,但出现段错误并且无法找到问题所在。

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)

我贴出insert、main和quicksort函数的代码。

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 的指针数组,但是您传递的是第一个节点的地址在链表中。你不能像那样混淆数据结构。

关于c - Quicksort C - 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31927722/

相关文章:

c - 可以使用 C11 栅栏来推理其他线程的写入吗?

C++:gcc 4.2.1 给出了段错误的程序,而不是在 linux 上

c - 如何防止c中的悬空指针/垃圾?

c++ - 使用 libvlc 的段错误

c - 二叉树的根到节点的距离

使用 pthreads 创建 makefile

c - 在 C 中释放动态分配的图节点

c - C中基于字符串的链表产生段错误

c++ - 如何将逗号分隔的数字矩阵放入 C++ 中的动态分配数组中?

c++ - 编译器说指针是 "out of scope"。我做错了什么基本的事情?