2016-11-27 16 views
-3

scoreGridはScore **でスコア10 *で作成されます。私はスコアの各*を初期化しようとしています、ランクという名前のバイナリファイルから読み込みます。スコアはintとchar [7]を持つシンプルな構造体です。"割り当ての左オペランドに[エラー] lvalueが必要です。

Score** scoreGrid; 
scoreGrid = (Score**)calloc(1,sizeof(Score*)*10); 
if(!scoreGrid){ 
    endOnScore(); 
} 

int res, i, j; 
for(i=0;i<10;i++){ 
    ((*scoreGrid) + i * sizeof(Score*)) = (Score*)malloc(sizeof(Score)); //[Error] lvalue required as left operand of assignment 
    if(!(*scoreGrid + i * sizeof(Score*))){ 
     endOnScore(); 
    } 
    res = fread((*scoreGrid + i * sizeof(Score*)),sizeof(Score),1,rank); 
    printf("res: %d\n", res); 
    if(res == 0){ 
     free((*scoreGrid + i * sizeof(Score*))); 
     break; 
    } 
} 

私はエラーがどこにあるのかコメントしました。多分もっと良い解決策がありますか?ありがとう!

+0

インデックス付きアドレッシングに対しては何がありますか? –

+0

割り当ての左側の値は、意図した値ではありません。 * scoreGridはscoreGrid [0]と同じで、最初のポインタを返します。逆参照の前に追加する必要があります。 – pticawr

+0

デバッガを使用して見つけてください – Anjaneyulu

答えて

3

((*scoreGrid) + i * sizeof(Score*))は、scoreGrid[0] + i * sizeof(Score*)に相当します。これはあなたが望むものではありません。

アレイアクセスを使用しないことを主張する場合は、(*(scoreGrid + i))と書く必要があります。これはscoreGrid[i]に相当します。

可読性のある方法で問題を解決するには、((*scoreGrid) + i * sizeof(Score*))のすべての数字をscoreGrid[i]に置き換えます。

+0

うまく働いた!私はこの悪い癖を変えようと思うでしょう..ありがとう! –

+0

'*(scoreGrid + i)'は 'scoreGrid [i]'と等価です。 'X [Y]'の定義は '*(X + Y)'です。 –

関連する問題