Hi all,

I trying to add two matrices together using a typedef struct, but i seems to get an error doing this. I asked my professor, but he couldnt help me. Is there anyone who might know why this problem is caused?

Thank you so much!

Code:

/* Structures */
typedef struct matrix {
    int rows;
    int cols;
    float **mat;
} Matrix;


Matrix matrix_add(Matrix a, Matrix b){
    Matrix m;

    int i, j;
    for (i=0; i<a.rows; i++) {
        for (j=0; j<a.cols; j++) {
            m.mat[i][j] = (a.mat[i][j]+b.mat[i][j]);
        }
    }
    m.rows = a.rows;
    m.cols = a.cols;

    return m;
}

Edited 3 Years Ago by Reverend Jim: Fixed formatting

You've got a pointer to a pointer - and you've set aside no memory for it, at all.

The algorithm may be OK, but it's not one I'd recommend you use. Strive for clarity and simplicity in your code.

adding two matrices into a third matrix which is NOT a part of a struct, is very much the way I'd suggest.

what errors are you getting?

In matrix_add() function you are trying to use an uninitialized pointer m.mat. It has to be allocated memory before setting the array elements in those loops. Move the two lines m.rows = and m.cols = up above the two loops then allocate memory for m.mat.

what errors are you getting?

In matrix_add() function you are trying to use an uninitialized pointer m.mat. It has to be allocated memory before setting the array elements in those loops. Move the two lines m.rows = and m.cols = up above the two loops then allocate memory for m.mat.

Thats was absolutely fantastic. I allocated memory by using:

/* Allocating mem for m.mat */
mat_temp = (float**) malloc(a.rows * sizeof(float*));
for (i = 0; i < a.rows; i++){
    mat_temp[i] = (float*) malloc(a.cols * sizeof(float));
}

m.rows = a.rows;
m.cols = m.cols;
m.mat = mat_temp;

and then everything worked!

Thank you so much for you help. I can finally relax a bit now.

Edited 3 Years Ago by Reverend Jim: Fixed formatting

This question has already been answered. Start a new discussion instead.