2015-05-31 1 views
0

Я написал этот код, но я не знаю, почему он терпит неудачу с входом 5 3. Когда я даю 3 5, он отлично работает. В каждом случае, если второе число больше, оно работает, но почему? Я уже пробовал это с malloc. Я использую Windows 7, блоки кода 10,05Почему не работает матрица с 5,3, но 3,5?

#include<stdio.h> 
#include<stdlib.h> 

int main() 
{ 
    int **matr; 
    int row, col, i, j; 

    scanf("%d", &row); //number of rows 
    scanf("%d", &col); //number of cols 

    matr = calloc(col, sizeof(int*));  //creating cols 
    for(i = 0; i < col; i++) 
    { 
     matr[i] = calloc(row, sizeof(int)); //in every col i create an array with the size of row 
    } 

    for(j = 0; j < row; j++) 
    { 
     for(i = 0; i < col; i++) 
     { 
      matr[j][i] = 10;  //fill the matrix with number 10 
     } 
    } 
printf("Matrix is ready\n"); 

    for(j = 0; j < row; j++)  //printing the matrix 
    { 
     for(i = 0; i < col; i++) 
     { 
      printf("%d ", matr[j][i]); 
     } 
     printf("\n"); 
    } 

    return 0; 
} 
+1

Какую ошибку вы получаете? – Abraham

+0

'matr = calloc (col, sizeof (int *));' -> 'matr = calloc (строка, sizeof (int *));', 'for (i = 0; i ' for (i = 0; i <строка; i ++) { matr [i] = calloc (col, sizeof (int)) ; ' – BLUEPIXY

ответ

0

Вы правильно выделили матрицу размера [col][row]. И тогда вы обращаетесь к нему, как если бы это была матрица размера [row][col]. Неудивительно, что он падает.

Сначала определите, какой индексный интерфейс вы хотите использовать, - [col][row] или [row][col] - а затем либо измените распределение изменений так, чтобы они соответствовали.

5

matr[i][j] Попробуйте вместо matr[j][i].

Другими словами, тщательно проверьте порядок индексов и их диапазоны.

+0

И не используйте' calloc() ', если вы собираетесь перезаписать данные в цикле. Используйте его только в том случае, если вы собираетесь сохранить некоторые нули, он может скрыть некоторые ошибки памяти из отладчика памяти, такие как доступ к _uninitilialized data_, что будет недостатком в вашем алгоритме, но не будет видно, потому что вы _initialized_ все данные , –

0

В calloc вы перевернули row и column, поэтому ваш размер массива 2d перепутан.

0

Я пробовал, он работал. Таким образом, первое распределение памяти дает строки. например матрица [эта часть будет дана первым распределением] [второй в течение] Спасибо большого, я в письменном преуспел исходный код, который умножает матрицы :) Я буду голосовать, как только я могу