1
resposta

"(colunas + 1)"

A solução proposta foi a seguinte:

matriz = malloc(sizeof(int*) * linhas);

for(int i = 0; i < linhas; i++) {
    matriz[i] = malloc(sizeof(int) * (colunas+1));
}

Esta solução é semelhante ao raciocínio desenvolvido pelo professor na aula. No entanto, na aula o professor estava tratando de uma matriz de strings (arrays de char), e, segundo entendi, é por este motivo que foi necessário adicionar mais uma coluna ((colunas + 1), em vez de apenas colunas), já que uma string termina necessariamente com um \0.

No entanto, no exercício proposto estamos tratando de um array de int, e não de um array de char. Assim, o correto não seria que a última linha de código ficasse assim?

 matriz[i] = malloc(sizeof(int) * (colunas));

Obrigado.

1 resposta

Olá, Hani! Como vai?

Ótima observação! Realmente, quando estamos trabalhando com arrays de strings, é necessário adicionar uma coluna extra para armazenar o caractere nulo (\0) que indica o fim da string. No entanto, no caso de um array de inteiros, não é necessário adicionar essa coluna extra.

Portanto, a sua sugestão está correta. A última linha de código deveria ser:

matriz[i] = malloc(sizeof(int) * colunas);

Dessa forma, estaremos alocando a quantidade correta de memória para cada linha da matriz de inteiros.

Abraços e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software