2013-06-12 3 views
0

Я пытаюсь добавить значения к моей назначенной матрице, но есть постоянная фальшивка, а визуальная студия аннотирует ошибку и перестает работать. может ли моя проблема?не может вводить значения в назначенную матрицу

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

void scanMath(int,int,int); 
void main() 
{ 
    int i,n,m,**arr; 
    printf("enter the size of the rows\n"); 
    scanf("%d",&n); 
    printf("enter the size of the coloms\n"); 
    scanf("%d",&m); 


    arr=(int**)malloc(n*sizeof(int*)); 
    for (i=0;i<n;i++) 
    { 
     arr[i]=(int*)malloc(m*sizeof(int)); 
    } 
    scanMath(arr[n][m],n,m); 
    free(arr); 
} 
void scanMath(int arr,int R,int C) 
{ 
    int i,j; 
    for (i=0; i<R; i++) 
    { 
     for (j=0; j<C; j++) 
     { 
      scanf("%d", &arr[i][j]); 
     } 
    } 
} 
    ' 
+1

Пробовал ли вы прочитать сообщение об ошибке, данное компилятором? Сделайте это, и если вы этого не поймете, опубликуйте здесь. – interjay

+0

Я рекомендую читать больше о указателях. – phoxis

ответ

1

Вы должны вызвать функцию

scanMath(arr, n, m); 

Поскольку функция принимает int **. При прохождении arr[m][n] будет проходить только один элемент, также он находится за пределами выделенных границ.

+3

Что изменилось в распределении относительно оригинала? – interjay

+0

На самом деле ничего. Я неправильно прочитал исходное сообщение, написав 'arr = (int **) malloc (n * sizeof (int **));'. Исправил ответ. – phoxis

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

void scanMath(int **,int,int); 
int main() 
{ 
    int i,n,m,**arr; 
    printf("enter the size of the rows\n"); 
    scanf("%d",&n); 
    printf("enter the size of the coloms\n"); 
    scanf("%d",&m); 


    arr=(int**)malloc(n*sizeof(int*)); 
    for (i=0;i<n;i++) 
    { 
     arr[i]=(int*)malloc(m*sizeof(int)); 
    } 
    scanMath(arr,n,m); 
    free(arr); 
} 
void scanMath(int **arr,int R,int C) 
{ 
    int i,j; 
    for (i=0; i<R; i++) 
    { 
     for (j=0; j<C; j++) 
     { 
      scanf("%d", &arr[i][j]); 
     } 
    } 
} 

Там вы идете. Поскольку вы объявили его как int **arr, а прототип тот же, достаточно просто передать имя переменной.

+2

Не забудьте бесплатно 'arr [i]'. Просто говорю ... – n3rd4n1

+0

Упс. Не смотрел на него так близко;) – plaknas

+0

спасибо, ребята! – user2276974