Member Avatar for Hi-Tone

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;
}

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.

Member Avatar for Hi-Tone

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.

Member Avatar for Hi-Tone

PS: how do I mark this post as "SOLVED" ?

Look at the information just above the Message edit box. It has a link to mark the thread as solved.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.