How to make a pointer point to NULL?

2

I need a position of an element in a dynamic vector to be empty, so I can check if I can put an element inside it later. However, the compiler does not allow it. Here is my code:

MATRIZ_ESPARSA *criar_matriz(MATRIZ_ESPARSA *matriz, int nr_linhas, int nr_colunas){
    matriz = (MATRIZ_ESPARSA *)malloc(sizeof(MATRIZ_ESPARSA));
    (*matriz).linhas = (CELULA *)malloc(nr_linhas*sizeof(CELULA));
    for(int i = 0; i < nr_linhas; i++){
        (*matriz).linhas[i] = NULL;
    }
    (*matriz).colunas = (CELULA *)malloc(nr_colunas*sizeof(CELULA));
    for(int i = 0; i < nr_colunas; i++){
        (*matriz).colunas[i] = NULL;
    }
    return(matriz); 
}

Check if there is any element:

if((*matriz).linhas[linha] == NULL && (*matriz).colunas[coluna] == NULL){
    (*matriz).linhas[linha] = *novo;
    (*matriz).linhas[linha].direita = NULL;
    (*matriz).colunas[coluna] = *novo;
    (*matriz).colunas[coluna].abaixo = NULL;
}
    
asked by anonymous 06.11.2017 / 01:18

1 answer

0

You can include an indicator flag of NULL in each of the cells in your array, for example:

#include <stdlib.h>


typedef struct CELULA {
    int is_null;
    double valor;
} CELULA;


typedef struct MATRIZ_ESPARSA {
    int nlinhas;
    int ncolunas;
    CELULA ** celulas;
} MATRIZ_ESPARSA;


MATRIZ_ESPARSA * matriz_criar( int ncolunas, int nlinhas )
{
    int y, x;

    /* Aloca a matriz */
    MATRIZ_ESPARSA * m = (MATRIZ_ESPARSA*) malloc( sizeof(MATRIZ_ESPARSA) );

    /* Aloca uma array de ponteiros */
    m->celulas = (CELULA**) malloc( nlinhas * sizeof(CELULA*) );

    /* Aloca uma array de doubles para cada linha da matriz */
    for( y = 0; y < nlinhas; y++ )
        m->celulas[y] = (CELULA*) calloc( ncolunas,  sizeof(CELULA) );

    /* Todas as celulas sao inicializadas com flag NULL */
    for( y = 0; y < nlinhas; y++ )
        for( x = 0; x < ncolunas; x++ )
            m->celulas[y][x].is_null = 1;

    m->nlinhas = nlinhas;
    m->ncolunas = ncolunas;

    return m;
}
    
06.11.2017 / 03:41