#include <stdio.h>
#include <stdlib.h>

#define MAX_A 10
#define MAX_B 100

void quickSort(int (*E)[MAX_B]);
void q_sort(int *E, int left, int right);

int main(void) {
  int i, j;
  int E[MAX_A][MAX_B];

  for(i = 0; i < MAX_A; i++) {
    for(j = 0; j < MAX_B; j++) {
      E[i][j] = rand() % MAX_B;
    }
  }

  quickSort(E);
  for(i = 0; i < MAX_A; i++) {
    for(j = 0; j < MAX_B; j++) {
      printf("%d\t", E[i][j]);
    }
    printf("\n");
  }

  return 0;
}

void quickSort(int (*E)[MAX_B]) {
  int i;
  for(i = 0; i < MAX_B; i++) {
    q_sort(E[i], 0, MAX_B - 1);
  }
}

void q_sort(int* E, int left, int right) {
  int pivot, l_hold, r_hold;

  l_hold = left;
  r_hold = right;
  pivot = E[left];

  while(left < right) {
    while((E[right] >= pivot) && (left < right)) {
      right--;
    }
    if(left != right) {
      E[left] = E[right];
      left++;
    }
    while((E[left] <= pivot) && (left < right)) { 
      left++;
    }
    if(left != right) {
      E[right] = E[left];
      right--;
    }
  }
  E[left] = pivot;
  pivot = left;
  left = l_hold;
  right = r_hold;
  if(left < pivot) {
    q_sort(E, left, pivot-1);
  }
  if(right > pivot) {
    q_sort(E, pivot+1, right);
  }
}

C言語でソートを行うプログラムを書いたのですが, Segmentation faultになってしまいます.
どこが間違っているのでしょうか?


出力例 :
1 2 3 3 5 5 6 6 7 9
0 0 2 2 3 6 6 6 7 9
0 1 2 2 3 5 7 7 8 9
1 2 2 2 3 6 7 8 9 9
0 1 3 4 4 5 7 8 9 9
0 0 1 1 2 3 3 6 6 6
3 4 5 5 5 6 6 7 7 9
0 2 3 4 4 4 4 5 5 7
1 3 4 4 6 7 8 8 8 9
0 2 2 4 6 6 6 8 9 9