2015-04-08 2 views
-1

Я не уверен, что я делаю неправильно, но некоторые из того, как Rtable [0,7] заряжается от 0 до 2 из никуда, я думал, что это проблема с распределением, но я не думаю, что я его выделяю неправильно, но вопрос в том, действительно ли я неправильно распределяю память?Я неправильно распределяю память?

int *Rtable; 
Rtable = (int *) malloc(sern * (2*sern) * sizeof(int)); 
initialize(sern, Rtable); 

and my initialize method is: 

void initialize(int sern, int *Rtable){ 
    int row, column; 
    for(row = 0; row < sern; row++){ 
     for(column = 0; column < sern; column++){ 
      Rtable[row*sern + 2*column] = (row == column) ? 0 : 1000; 
      Rtable[row*sern + (2*column) + 1] = (row == column) ? row+1 : 0; 
      printf("row: %d, and column: %d, data: %d\n",row, 2*column, Rtable[row*sern +2*column]); 
      printf("row: %d, and column: %d, data: %d\n",row, 2*column+1, Rtable[row*sern +2*column+1]); 
      //Rtable[row][2*column] = (row == column) ? 0 : 1000; 
      //Rtable[row][(2*column)+1] = (row == column) ? row+1 : 0; 
     } 
    } 
    int i, k; 
    for(i = 0; i < sern; i++){ 
     printf("data[%d] is : ", i); 
     for(k = 0; k < (2*sern); k++) 
      printf("%d:%d, ",k,Rtable[i*sern + k]); 
     printf("\n"); 
    } 
} 
+0

в моем случае sern = 4; – Mrjiang1992

+0

Выделение направо; вычисление индекса массива неверно. Совет: нарисуйте изображение матрицы. –

+0

Я нарисовал матрицу, и, когда шаг за шагом, результаты, полученные мной, такие же, как printf («строка:% d и столбец:% d, данные:% d \ n», строка, 2 * столбец, Rtable [строка * sern + 2 * column]); printf ("строка:% d и столбец:% d, данные:% d \ n", строка, 2 * столбец + 1, Rtable [строка * sern + 2 * column + 1]); , но for (i = 0; i Mrjiang1992

ответ

1

Число столбцов фактически 2*sern. Таким образом, выражение Rtable[row*sern + 2*column] должно быть Rtable[row*(2*sern) + 2*column].

+0

СПАСИБО! что имеет смысл, я не могу поверить, что не заметил этого. – Mrjiang1992

+0

@ Mrjiang1992 вы можете сделать макрос как '#define R (r, c) Rtable [(r) * 2 * sern + (c)]', который сделает код более читаемым –

+0

Его аргумент malloc() неверен слишком. –

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