Como aumentar uma matrix - C - Portugal-a-Programar
Como aumentar uma matrix
Por 47, 23 de Março de 2007 em C
Boas alguém sabe me dizer se é possível e como faço para aumentar linhas e colunas a uma matrix?
Como assim? Isso só daria se fosse com listas ligadas dinamicamente. Mas tu em array não é? Acho que não dá porque tens de declarar a matriz com um certo tamanho antes de fazeres operações com ela.
Pois estou mesmo a falar em array o que eu queria fazer era mesmo tipo
declaro a matrix
char mtrx[1][1];
e depois queria redimensionar-la para uma matrix de 10*10 por exemplo
Pois.. Isso não dá, pelo menos que eu conheça. O máximo que podias fazer era declarar outra matriz que seja maior e passar os elementos da primeira matriz para a segunda.
Pois isso nao me serve. obg na mesma
se alocares a matriz dinamicamente (através do 'malloc'), podes usar o 'realloc' para a redimensionar (caso haja espaço o seu tamanho é aumentado, caso contrário aloca um novo espaço e copia os valores antigos para a nova localização).
é claro que se estás a trabalhar com matrizes bidimensionais, alocar espaço dinamicamente complica a manipulação das matrizes (usando uma macro podes simplificar um pouco a coisa, mas continua a ser preciso ter algum cuidado para não cometer erros).
Como é que faço uma matrix com o malloc? podes me deixar aqui um exemplo sfv?
int* m=(int*)malloc(10*sizeof(int)); //ou ...calloc(10,sizeof(int));
desta forma ficas com uma matriz de 10 posições. podes aceder às posições da matrix fazendo m[...], tal como fazes normalmente para matrizes de uma dimensão.
de referir que estas matrizes são sempre tratadas como sendo de uma dimensão, ou seja se quiseres fazer dela uma matriz de duas dimensões é necessário fazer "conversões" de posições (o que, tal como referi no post anterior, aconselho a fazer com uma macro).
Margrad 0
Uma matrix NxM
/*e antes de sair do programa voltar a libertar a memoria alocada*/
acho que é isto, estou a fazer de cor e posso ter algum erro.
mas isso não é uma matriz NxM, mas sim N matrizes de M elementos.
Epa... arrays dinamicos...
Faz-se assim: cada vez que for preciso aumentar o tamanho de uma matriz, copia-se esta para uma com o dobro do tamanho ( por exemplo ) e volta-se a atribui-la a mesma variavel.
Em C++ podes definir uma classe de arrays dinamicos que se aumenta sempre que necessario. Alias, a STL é capaz de já trazer uma estrutura de dados desse tipo.
mas se usares o 'realloc', o SO verifique se pode aumentar o tamanho da matriz actual, e caso isso não seja possível é que aloca um novo bloco de memória o copia os valores do antigo.