>>744
retu×gyoで確保した行列を、gyo×retuとしてアクセスしています。
したがって、gyo != retu の場合は、確保されていない領域にアクセスすることになります。

それと、>>746とは逆の事を書きますが、>>744は retu と gyo で
確保する順序が逆ではありませんか?

> matrix = (int **)malloc(sizeof(int *) * retu);
> if (matrix==NULL) exit(1);
> for (i=0; i<retu; i++) {
> matrix[i] = (int *)malloc(sizeof(int) * gyo);
> if (matrix[i]==NULL) exit(1);
> }

ではなくて

> matrix = (int **)malloc(sizeof(int *) * gyo);
> if (matrix==NULL) exit(1);
> for (i=0; i<gyo; i++) {
> matrix[i] = (int *)malloc(sizeof(int) * retu);
> if (matrix[i]==NULL) exit(1);
> }

とすべきかと。
縦が「行」で横が「列」ですよね。
違う事をやろうとしているのだったらすみません。