2
@implementation MonthView {
    DayView *dayViews[6][7];
}

Xcode はこのコードについて文句を言いませんが、AppCode は警告を出します:

明示的な有効期間のない非 const 型 'DayView * * const * ' へのポインター

私の意図は、任意の MonthView インスタンスのメモリ レイアウトの一部となる DayView ポインターの 6x7 ブロックを作成することでした。

このコードは意図したとおりに動作していますか? また、この警告を修正するにはどうすればよいですか?

4

1 に答える 1

1

あなたがやろうとしていることは有効ですが、上記のコメントが正しく、これが AppCode のバグによるものであり、受け取った警告が作業にレンチを投げる場合 ( -Werrorを使用する場合など)、または単に気になる場合それを受け取るには、 -init内で配列を割り当てるだけで回避できます。

公正な警告: このコードは私の頭から離れたものであり、記述どおりに動作することを保証するものではありません。

@implementation MonthView { 
     DayView ***dayViews;
}

@interface MonthView
     - (id)init {
          if ((self = [super init])) {
               int i;

               // do stuff here

               // Create the array
               dayViews = malloc(sizeof(id) * 6);
               dayViews[0] = malloc(sizeof(DayView *) * 6 * 7);

               for (i = 1; i < 6; i++) {
                    dayViews[i] = dayViews[0] + (i * 7);
               }
          }

          return self;
     }
@end

このコードは、必要な malloc の呼び出し数を最小限に抑えながら、通常どおりアクセスできる 2 次元配列を生成する必要があります。

于 2012-01-06T02:30:18.517 に答える