-1

ints の 2D マトリックスを作成し、 を使用してメモリを同じものに割り当てようとしていますmalloc()
マトリックスを次のようにしたいの{{-4,0},{-3,0},{-2,0},{-1,0},{1,0},{2,0},{3,0},{4,0}} ですが、後で変更できるようにしたいので、を使用して連続ブロックを動的に割り当てようとしていますmalloc()。私が作成した:

typedef int** scores_table

私の関数は type を返すことができscores_tableます。

これは私のコードです:

scores_table alloc_scores_table(){
    scores_table scores;
    int i,j, *row;
    row=(int*)malloc(sizeof(int)*2*8);
    scores=(scores_table)malloc(sizeof(int*)*8);
    if(scores==NULL || row==NULL){
        quit();
    }
    for(i=0;i<8;i++){
        scores[i]=row+i*2;
    }
    for(i=0;i<8;i++){
        for(j=0;j<2;j++){
            if(j==1){
                scores[i][j]=0;
            }
            else{
                if(i>3){
                    scores[i][j]=-4+1+i;
                }
                else{
                    scores[i][j]=-4+i;
                }
            }
        }
    }
    return scores;
}

問題は、関数が返されるだけ-4で、その理由がわかりません。私は何を間違っていますか?

4

2 に答える 2

1

結果を印刷するときに何か間違ったことをしている可能性があります。このコード:

int main(void) {
    scores_table st = alloc_scores_table();

    for (int i = 0; i < 8; ++i) {
        for (int j = 0; j < 2; ++j) {
            printf("st[%d][%d] = %d\n", i, j, st[i][j]);
        }
    }

    return 0;
}

次の出力が得られます。

st[0][0] = -4
st[0][1] = 0
st[1][0] = -3
st[1][1] = 0
st[2][0] = -2
st[2][1] = 0
st[3][0] = -1
st[3][1] = 0
st[4][0] = 1
st[4][1] = 0
st[5][0] = 2
st[5][1] = 0
st[6][0] = 3
st[6][1] = 0
st[7][0] = 4
st[7][1] = 0

私はあなたが期待したものだと思いますか?

于 2014-01-03T09:15:58.163 に答える
1

配列自体をmalloc'd にしないのはなぜですか?

typedef int scores_table[2][8];

scores_table* alloc_scores_table()
{
    scores_table *scores = malloc(sizeof *scores);
    if(scores)
    {
        // your initalization code here
        size_t i, j;
        for(i = 0; i < 8; i++) {
            for(j = 0; j < 2; j++) {
                if(j == 1) {
                    *scores[i][j]=0;
                }
                else {
                    if(i > 3) {
                        *scores[i][j]=-4+1+i;
                    }
                    else {
                        *scores[i][j]=-4+i;
                    }
                }
            }
        }
    }

    return scores;
}
于 2014-01-03T09:08:31.007 に答える