-2

私はこのプログラムを実行して、行列の鞍点を見つけています(要素は列に最大数があり、同時に行に最小数があります)

これが問題です。セグメンテーション違反が発生しています。実際にwindowsだと動くのですが、ubuntoで動かそうとすると動きません。残念ながら、自分のマシンにはウィンドウしかないので、なぜ機能しないのか、どこで問題が発生しているのかわかりません。

皆さん、私を助けてくれませんか? コードの何が問題なのか、エラーの場所を教えてください!

int main(){
    int i, j, *ml, *mc, key = 1, z;
    int ordem, **me;
    char car;

    /* ml = smallest of each row, mc = greatest of each column
     * me = given matrix 
     * ordem = size of matrix */

    scanf("%d", &ordem);

    me = malloc(ordem * sizeof(int));
    for(i = 0; i < ordem; i++){
        me[i] = malloc(ordem * sizeof(int));
    }
    ml = malloc (ordem * sizeof(int));
    mc = malloc (ordem * sizeof(int));

    for(i = 0; i < ordem; i++){
        scanf("%d", &me[i][0]);
        for(j = 1; j < ordem; j++){
            scanf(" %d", &me[i][j]);
        }
        do{
            z = scanf("%c", &car);
        }while ((z != EOF) && (car != '\n'));
    }

必要に応じて、コードの残りの部分を提供できますが、malloc または scanf のいずれかでエラーが発生していることは確かです。

どうもありがとう、本当に助けてくれてありがとう!よろしくお願いします!

4

3 に答える 3

0

ポインター配列を割り当てるときは、int ではなく、ポインターの要素サイズを取得する必要があります。Ubuntu システムでは、ポインターのサイズはおそらく 64 ビットですが、int は 32 ビットのままですが、Windows では、どちらも従来と同じサイズです。

于 2014-09-11T12:47:13.150 に答える