ggf84
(usa Suse)
Enviado em 19/01/2007 - 18:46h
> Olá pessoal!
>
> Eu estou fazendo um programa (em C) que tem como entrada uma matriz de
> tamanho variável, dada pelo usuário.
> Para gerar essa matriz, eu criei a seguinte função:
>
> void gera_matriz(float **matriz, int i, int j)
> {
> int contador;
>
> /* Primeiro eu crio um bloco com `i' ponteiros */
> if (!(*matriz = (float *) malloc((i * (sizeof(float *))))))
> {
> printf("Não há memória suficiente");
> exit(-1);
> }
>
> /* Agora crio `i' blocos com `j' floats */
> for (contador = 0; contador < i; contador++)
> {
> if (!(matriz[contador] = (float *) malloc((j *
> (sizeof(float))))))
> {
> printf("Não há memória suficiente");
> exit(-1);
> }
> }
> }
>
> E no meu main() eu declaro as seguintes variáveis:
>
> int main(void)
> {
> int contai, contaj, pivo;
> int i, j, jaument;
> int operador;
> float **matriz;
>
> ...
> gera_matriz(matriz, i, jaument);
> ...
> }
>
> Quando eu compilo e rodo o programa, ele dá "Segmentation fault". Então,
> depois de muito quebrar a cabeça, eu comecei a tentar coisas absurdas e uma
> delas funcionou:
>
> int main(void)
> {
> float **matriz;
> int contai, contaj, pivo;
> int i, j, jaument;
> int operador;
>
> ...
> gera_matriz(matriz, i, jaument);
> ...
> }
>
> Não viram diferença? Olhem a posição da declaração do "float **matriz;". Isso
> deixou o meu programa funcionando! Agora eu pergunto: isto é normal? É uma
> regra que eu não sei (Já que aprendi a programar sozinho)? Esqueci de algo na
> linha de comando do gcc ( que foi "gcc -Wall -o gauss-jordan
> gauss-jordan.c")? É um bug?
>
> Desculpem a pergunta meio off-topic.
>