使用函数findMax(int ** a,int m,int n)查找矩阵中的最大元素

时间:2015-07-04 13:05:01

标签: c arrays pointers multidimensional-array malloc

你好问我在问题中提到我需要在矩阵中找到最大元素。我确实得到了输出,但对于一些测试用例,输出有点奇怪。它给出了正确的输出但后来它给出了一些警告,如附图所示。请告诉我我在哪里做错了。!

以下是我使用的代码:

#include<stdio.h>
#include<stdlib.h>
int findMax(int **a,int m, int n)
{
    int i,j,max=0;
    for(i=0;i<=m-1;i++)
    {
        for(j=0;j<=n-1;j++)
        {
            if(max<a[i][j])
                max=a[i][j];
        }
    }
    return max;
}

int main()
{
    int* a[20];
    int i,j,r,c,s=0;
    printf("Enter the number of rows in the matrix\n");
    scanf("%d",&r);
    printf("Enter the number of columns in the matrix\n");
    scanf("%d",&c);
    printf("Enter the elements in the matrix\n");
    for(i=0;i<=r-1;i++)
    {
        a[i]=malloc(sizeof(int)*c);
        for(j=0;j<=c-1;j++)
            scanf("%d",&a[i][j]);
    }
    printf("The matrix is\n");
    for(i=0;i<=r-1;i++)
    {
        for(j=0;j<=c-1;j++)
            printf("%d ",a[i][j]);
        printf("\n");
    }
    s=findMax(a,r,c);
    printf("The maximum element in the matrix is %d",s);
    for(i=0;i<=r;i++)
        free(a[i]);
    return 0;
}

//Enter the number of rows in the matrix
//> 1
//> Enter the number of columns in the matrix
//> 2
//> Enter the elements in the matrix
//> 3
//> 56
//> The matrix is
//3 56 
//The maximum element in the matrix is 56*** glibc detected *** a.out:        //munmap_chunk(): invalid pointer: 0x08048307 ***//

1 个答案:

答案 0 :(得分:2)

看起来你要释放一条不存在的行:

for(i=0;i<=r;i++)
  free(a[i]);

a[1]不存在,因此出错。替换为:

for(i=0;i<=r-1;i++)
  free(a[i]);