• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Perl

Problema com Matriz

3 mensagens neste tópico

#include <stdio.h>
#include <stdlib.h>

float **matriz;
int N=0;

int main(){

scanf("%i",&N);
matriz=malloc(sizeof(float)*N*N);

int i,j;

for(i=0;i<N;i++){
for(j=0;j<N;j++){
	matriz[i][j]=0;
	printf("%f ",matriz[i][j]);	
}
printf("\n");
}

return 1;
}

Como resolvo?! Compila direito com Wall e dá "core dumped"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estás a alocar mal a matriz.

A matriz é um array de arrays ( ou melhor array de apontadores para arrays de float, neste caso ).

Por isso matriz é um array com N apontadores para float.

E cada apontador tem um array de floats associado (tens de alocar memória para este)

Podes fazer

...
scanf("%i",&N);
matriz= (float **) malloc(sizeof(float * ) * N);  // N apontadores para array

int i,j;

for(i=0;i<N;i++){
matriz[i] = (float *) malloc( sizeof( float ) * N ) ;  // aloca array com N posições
for(j=0;j<N;j++){
	matriz[i][j]=0;
	printf("%f ",matriz[i][j]);	
}
printf("\n");
}
...

Edit: o core dumped é devido ao acederes a  linha "i" da matriz, coluna "j" mas matriz[ i ] não tinha valor nenhum ( ou melhor tinha 0 por ser uma variavel global, mas não é o valor suposto para a matriz ) e o endereço não pertence à memoria do teu programa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nice answer! Só me apercebi disso depois à conversa com um amigo. Thanks!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora