2012-05-08 2 views
0

Итак, я пытаюсь выделить память для двумерного массива int, чтобы я мог ссылаться на него за пределами цикла, в котором определяется размер. (У меня проблема с масштабом, потому что размер массива не фиксирован.)Скрипрованное значение не является ни массивом, ни указателем

Так что это было предлагаемое решение, но я получаю сообщение об ошибке «Значение сценария не является ни массивом, ни указателем». Кто-нибудь знает, что я делаю неправильно?

//M and m are just 2 int numbers 
int X = self.create2dArray(M,m); 

for(int kk = 0; kk < M; kk++) 
{ 
for (int kk1 = 0; kk1 < m; kk1++) 
     { 
//small "x" is an NSMutableArray of NSNumbers. So I am just running the 2 for loops to fill the whole 2D array 
     X[kk][kk1] = [[x objectAtIndex: (kk + kk1 * J)] intValue]; //ERROR Line 
     }     
} 

//outside of Main 

static inline int **create2dArray(int w, int h) 
{ 
    size_t size = sizeof(int) * 2 + w * sizeof(int *); 
    int **arr = malloc(size); 
    int *sizes = (int *) arr; 
    sizes[0] = w; 
    sizes[1] = h; 
    arr = (int **) (sizes + 2); 

    for (int i = 0; i < w; i++) 
    { 
     arr[i] = calloc(h, sizeof(**arr)); 
    } 

    return arr; 
} 

ответ

1

Я считаю, что первая строка должна начинаться с int** X вместо int X

+0

Это фиксированный мой вопрос. Кажется глупо оглядываясь на него. Его всегда что-то тонкое, что я скучаю. Огромное спасибо! – MrHappyAsthma

0

Хорошо, поэтому ваша проблема, скорее всего, лежит в вашем ручном распределении памяти для целых чисел. Мое предлагаемое решение состоит в том, чтобы просто заполнить его случайными «заполняющими» числами, например: 0. Поступая таким образом, вы не рискуете испортить процесс распределения. Кроме того, это намного проще, и это работает, потому что вы будете заполнять его целыми числами позже. Надеюсь, это помогло!

Смежные вопросы