Alocaçãodinâmica...
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.
--
Raphael "DephiNit" Pereira
-=-*-=-*-=-
dephinit@softhome.net
-=-*-=-*-=-
Reply to: