Vetor de Ponteiros - PUC-Rio

Download Report

Transcript Vetor de Ponteiros - PUC-Rio

Vetor de Ponteiros
Exemplo de Alocação
Escrever Vetor de Vetores de floats
int main()
{
int i, k, n;
float **vetor; // vetor de vetores
int *tamanho; // vetor com o tamanho de cada um dos vetores
printf("entre com o numero de vetores que deseja processar\n");
scanf("%d", &n);
if( n <= 0 )
{ printf("erro: numero de vetores < 0\n"); exit(1); }
//alocação dinâmica do vetor de tamanhos
if( (tamanho = (int*)malloc(n*sizeof(int))) == NULL )
{ printf("nao foi possivel alocar memoria para o vetor de tamanhos!!\n"); exit(1); }
//alocação dinâmica do vetor de vetores
if( (vetor = (float**)malloc(n*sizeof(float*))) == NULL )
{ printf("nao foi possivel alocar memoria para o vetor de ponteiros!!\n"); exit(1); }
//Escrevendo cada um dos vetores
for( k=0; k<n; k++ )
{
printf("entre com o tamanho do vetor %d\n", k+1 );
scanf("%d", &tamanho[k] );
if( tamanho[k] <= 0 )
{ printf("erro: numero de elementos do vetor %d < 0\n", k+1 ); exit(1); }
// alocação dinâmica de cada um dos vetores de floats
if( (vetor[k] = (float*) malloc(tamanho[k]*sizeof(float))) == NULL )
{
printf("nao foi possivel alocar memoria para o vetor %d\n", k+1); exit(1);
}
// entrando com cada um dos elementos de cada vetor
for( i=0; i<tamanho[k]; i++ )
{
printf("entre com o valor da posicao %d do vetor %d:", i, k+1);
scanf("%f", &vetor[k][i] );
}
}
(...)
//No final, liberação da memória
for( k=0; k<n; k++ )
free(vetor[k]);
free(vetor);
free(tamanho);
}