对于某些特定值,不能填充矩阵的分配存储器

时间:2018-05-01 19:39:41

标签: c

所以我做了这个程序,它包含2个矩阵(m1 **,m2 **),而不是多个矩阵。 但它随机崩溃了一些值(例如:m1 [2] [1],m2 [2] [1]; m1 [4] m2 [3],在最后一个例子中,它在我选择m2值之前就破裂了。 我知道在分配内存后会出现问题,因此可能是在填充矩阵时(preencherMatrix功能)。 我不知道为什么,你能帮助我吗?

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

typedef struct
{
    int dX,dY;
    int** mat;
} MATRIX;

MATRIX criarMatrix (MATRIX mat)
{
    int aux;

    printf("MATRIX \n");
    printf("Dimensao X: \n");
    scanf("%d",&aux);
    mat.dX=aux;
    printf("Dimensao Y: \n");
    scanf("%d",&aux);
    mat.dY=(int)aux;

    int index;

    mat.mat=(int**)malloc(mat.dX*sizeof(int*));
        for (index=0;index<mat.dY;index++)
            mat.mat[index]=(int*)malloc(mat.dY*sizeof(int));

    return(mat);
}

MATRIX preencherMatrix (MATRIX mat)
{
    int x,y;

    for(x=0;x<mat.dX;x++)
    {
        for(y=0;y<mat.dY;y++)
        {
            mat.mat[x][y]=rand()%11;
        }
    }
    return(mat);
}

void printMatrix (MATRIX mat)
{
    int x,y;

    printf("\n................... \n");
    for(x=0;x<mat.dX;x++)
    {
        for(y=0;y<mat.dY;y++)
        {
            printf("%d ",mat.mat[x][y]);
        }
    printf("\n");
    }
    printf("................... \n");
}

MATRIX multiplicaMatrix (MATRIX m1, MATRIX m2)
{
    int x,y,i,j;

    x=m1.dX;
    y=m2.dY;

    for(i=0;i<x;i++)
    {
        for(j=0;j<y;j++)
        {
            m1.mat[i][j]=m1.mat[i][j]*m2.mat[j][i];
        }
    }
    return(m1);
}

void main ()
{
    srand(time(NULL));

    MATRIX m1;
    MATRIX m2;

    m1=criarMatrix(m1);
    m1=preencherMatrix(m1);
    printMatrix(m1);

    m2=criarMatrix(m2);
    m2=preencherMatrix(m2);
    printMatrix(m2);

    if (m1.dX!=m2.dY)
    {
        printf("Numero de colunas de M1 e diferente do numero de filas de M2\n \n");
        return(-1);
    }

    m1=multiplicaMatrix(m1,m2);
    printMatrix(m1);
}

1 个答案:

答案 0 :(得分:1)

第一for (index=0;index<mat.dY;index++)之后的这一行malloc应该有index < mat.dX

您已使用dX分配了第一维,因此第二维的循环应该从0..dX-1

开始