*Q[]はint型のポインタの配列で、疑似二次元配列を作っています。その縦の個数は8で、横の個数は融通が効くようにしています。
Q[i]の値を全てQ[i+1]にコピーして、Q[i+1]の最後にaと0を代入する関数です。
一応はうまく動くのですが、i=4, j=3になると
Q[i+1] = realloc(Q[i+1], sizeof(int)*(j+1));
のところでセグメントエラーを起こしてしまいます。
その理由がわからず、途方にくれています。
助けてください。

void copyArray2(int *Q[], int i, int a){
  int j, k;

  j = count(Q[i]);

  Q[i+1] = realloc(Q[i+1], sizeof(int)*(j+1));

  for(k=0; k<j; k++){
    Q[i+1][k] = Q[i][k];
  }
  Q[i+1][k] = a;
  Q[i+1][k+1] = 0;

  return;
}