2016-04-17 19 views
0

"number"構造体要素でdinamically行列を作成したいと思います。 "theNumber"を印刷しようとすると、プログラムはprintf関数から終了しません。 printf.私は間違った割り当てをしたことがありますか?構造体からCのフィールドをプリントできない

struct number { 
    int theNumber; 
}; 

struct table { 
    struct number ** mem; 
}; 

unsigned i; 

struct table *createInstance(unsigned min) { 

//flag1 
    struct table * someInstance = (struct table *) malloc(sizeof (struct table)); 

//flag2 
    if (someInstannce == NULL) { 
     return 0; 
    } 

//flag3 
    someInstannce->mem = (struct number **) malloc((min + 1) * sizeof (struct number **)); 

//flag4 
    for (i = 0; i <= min; i++) { 
     someInstannce->mem[i] = (struct table *) calloc(5, sizeof (struct number *) + 1); 
    } 

//flag5 
    for (i = 0; i <= min; i++) { 
     for (j = 0; j = 5; j++) { 
      printf("%d", someInstannce->mem[i][j].theNumber); 
     } 
    } 

    return someInstance; 
} 
+0

これは厳密にCであるため、mallocの戻り値をキャストできません。 – sjsam

+0

あなたは 'someInstance'と' someInstannce'を使用しています。これらのタイプミス、またはその名前の別の変数がありますか?このコードはあなたのコードのようなものですか?実際にはあなたのコードではありませんか? –

+1

@sjsam: 'void *'を他のポインタにキャストすることは、標準ではallowe3dです。しかし、それは落胆します。 – Olaf

答えて

0

このライン

for (j = 0; j = 5; j++) 

5jをクランプし、5が非0であるので、条件テストが "真" であろう。ループは決して終わらないでしょう。私はまた、あなたが別の型にキャスト

someInstannce->mem[i] = (struct table *) calloc(5, sizeof (struct number *) + 1); 

を疑問視し、ポインタのサイズではなく、構造体のサイズを要求

for (j = 0; j < 5; j++) 

試してみてください。割り当ては、あなたが任意のポインタ、そのポインタの内容の一部のタイプ、例えば、int型* I =のmalloc(はsizeof(int型))のためにメモリを割り当てる必要があります

someInstance->mem[i] = calloc(5, sizeof (struct number) + 1); 
0

する必要があります。

someInstannce->mem = (struct number **) malloc((min + 1) * sizeof (struct number **)); 

someInstannce->mem = (struct number **) malloc((min + 1) * sizeof (struct number *)); 

someInstannce->mem[i] = (struct table *) calloc(5, sizeof (struct number *) + 1); 

に編集してください

someInstannce->mem[i] = (struct number *) calloc(5, sizeof (struct number) + 1); 

T彼は印刷ループの状態が悪いので、j = 5はjでなければなりません< 5.