Search code examples
c++matrixsubmatrix

Building a submatrix from a matrix


I'm trying to split a matrix given into 4, but I'm getting some errors and I can't figure out why. I'm kind of new to the language. Does anybody knows what am I doing wrong?

void split_tl(T **matrice, unsigned int dim){
    if(dim == 1){
        return;
    }

    T **tl = new T*[dim/4];
    for(unsigned int i = 0; i<dim/4;++i){
        tl[i] = new T[dim/4];
    }

    for(unsigned int i=0; i<dim;++i){
        for(unsigned int j=0; j<dim;j++){
            if((i<dim/2) && (j<dim/2)){
                tl[i][j] = matrice[i][j];
            } else{
                std::cout << "no ";
            }
        }
        std::cout << std::endl;
    }
}

In this function I'm trying to obtain the top left corner of the matrix.

int **matrice = new int*[2];

for(unsigned int i = 0; i<2;++i){
    matrice[i] = new int[2];
}

for(unsigned int i = 0; i<2;++i){
    for(unsigned int j = 0; j<2;++j){
        matrice[i][j] = i+j;
    }
}

This is the matrix I'm sending. It is a 2x2 matrix, just for testing purposes.

These are the errors from Valgrind:

==133== Invalid read of size 8
==133== Invalid write of size 4
==133== Process terminating with default action of signal 11 (SIGSEGV)
==133== Access not within mapped region at address 0x0

Solution

  • If dim is the side of a matrix, allocating to a quarter matrix should be dim/2.

    Below in the code you are using :

    if((i<dim/2) && (j<dim/2)){
      tl[i][j] = matrice[i][j];
    }
    

    here tl may exceed the allocation