2016-03-13 2 views
0

Я пытаюсь найти максимум всех значений в 2D-массиве, доступ к которому осуществляется с помощью функции C с помощью двойного указателя. Когда я запускаю код, он просто заканчивается, возвращая любое значение функции вызывающего.Доступ к двумерному массиву с использованием двойного указателя на функцию языка C

Я попытался изменить код, чтобы распечатать все значения, чтобы узнать проблему, и обнаружил, что он печатает только 1 и 2 для следующих данных образца в качестве входных данных. Для прогона кода кода я предоставил строку = 2, col = 2 и значения = 1,2,3,4

Пожалуйста, дайте мне знать, почему? Также, если вы сомневаетесь, неясно, скажите это. У меня был трудный день, поэтому, возможно, я не мог объяснить лучше.

Существует несколько ограничений к коду: 1. Функции Подписи (интермедиат ** а, ИНТ м, Int N)

#include<stdio.h> 

int findMax(int **a,int m,int n){ 

    int i,j; 
    int max=a[0][0]; 
    for(i=0;i<m;i++){ 
    for(j=0;j<n;j++){ 
     if(a[i][j]>max){ 
     max=a[i][j]; 
     } 
     //printf("\n%d",a[i][j]); 
    } 
    } 

return max; 
} 

int main(){ 
    int arr[10][10],i,j,row,col; 
    printf("Enter the number of rows in the matrix"); 
    scanf("%d",&row); 
    printf("\nEnter the number of columns in the matrix"); 
    scanf("%d",&col); 

    printf("\nEnter the elements of the matrix"); 
    for(i=0;i<row;i++){ 
    for(j=0;j<col;j++){ 
     scanf("%d",&arr[i][j]); 
    } 
    } 

    printf("\nThe matrix is\n"); 
    for(i=0;i<row;i++){ 
    for(j=0;j<col;j++){ 
     printf("%d ",arr[i][j]); 
    } 
    printf("\n"); 
    } 
    int *ptr1 = (int *)arr; 
    printf("\nThe maximum element in the matrix is %d",findMax(&ptr1,row,col)); 
    return 0; 
} 
+4

'int ** a' не является реальным 2D-массивом. 'int ** a' ->' int (* a) [10] ' – BLUEPIXY

+1

' int arr [10] [10] l' -> 'int ** arr;' ... 'arr = malloc (строка * sizeof (int *)); for (int i = 0; i BLUEPIXY

+2

Вы выбрасываете' arr' и как в результате вы получите доступ к нему некорректно. Я удивлен, что вы не получаете ошибку сегментации. Удалите бросок и вместо этого зафиксируйте свои объявления, чтобы объявить правильные типы указателей. –

ответ

0

Там находятся несколько ограничений на код: 1. Функция Signature (int ** a, int m, int n)

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

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

int findMax(int **a,int m,int n){ 

    int i,j; 
    int max=a[0][0]; 

    for(i=0; i<m; i++) 
    { 
     for(j=0; j<n; j++) 
     { 
     if(a[i][j]>max) 
     { 
      max=a[i][j]; 
     } 
     //printf("\n%d",a[i][j]); 
     } 
    } 

return max; 
} 

int main(){ 
    int **arr; 
    int i,j,row,col; 
    printf("Enter the number of rows in the matrix"); 
    scanf("%d",&row); 
    printf("\nEnter the number of columns in the matrix"); 
    scanf("%d",&col); 

    arr = malloc(row * sizeof(int*)); 
    if (!arr) 
    { 
     printf("arr not malloc'd\n"); 
     abort(); 
    } 

    for(i=0;i<row;i++) 
    { 
     arr[i] = malloc(col * sizeof(int)); 
     if (!arr[i]) 
     { 
      printf("arr[%d] not malloc'd\n", i); 
      abort(); 
     } 

     for(j=0;j<col;j++) 
     { 
      arr[i][j] = i * j; 
     } 
    } 

    printf("\nThe matrix is\n"); 
    for(i=0;i<row;i++) 
    { 
     for(j=0;j<col;j++) 
     { 
      printf("%d ",arr[i][j]); 
     } 
     printf("\n"); 
    } 


    printf("\nThe maximum element in the matrix is %d",findMax(arr, row, col)); 
    return 0; 
} 

Задача сделать это в одном malloc остается в качестве упражнения для читателя.

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