Veleu flavio pela ajuda, demorei a responder pois tava sem net em casa. O erro era de execução, dai eu me arretei e fui estudar esse negocio de alocação dinâmica(ainda não sei como funciona) nuns livros de C que eu tenho e casa, e lá possuia um script de alocação para matrizes bidimensionais, o qual resolveu o meu problema parcialmente. suponhamos o seguinte código: #include <stdio.h>
#include "lfixo.h"
extern long int a,m;
extern float nad[7];
float Tgl0 = 580;
float Tr0 = 590;
void ci(float **Tgl,float **Ts,float **Tr)
{
Tgl = Alocar(a,m);Ts = Alocar(a,m);Tr = Alocar(a,m);
long int i,j,k;
for(j=0;j<m;j++)
{
// inicialização das temperaturas
Tgl[0][j]=Tgl0;
//condições iniciais de temperatura na fase fluida
Ts[0][j]=Tgl0; //condições iniciais de temperatura na fase sólida
Tr[0][j]=Tr0; //condições iniciais de temperatura na fluido refrigerante
}
Liberar(a,m,Tgl);Liberar(a,m,Ts);Liberar(a,m,Tr);}
onde as funções Alocar e Liberar funcionam perfeitamente alocando a minha matriz 2D.
Agora considerando o seguinte main:
#include <stdio.h>
#include "lfixo.h"
long int a=2400,m=6;
float nad[7],dt;
void main(void)
{
float **Tgl, **Ts, **Tr;
ci(Tgl,Ts,Tr);
}
esse código funciona perfeitamente. no entanto se eu alterar a função ci(mantendo o mesmo main) para:
#include <stdio.h>
#include "lfixo.h"
extern long int a,m;
extern float nad[7];
float Tgl0 = 580;
float Tr0 = 590;
void ci(float **Tgl,float **Ts,float **Tr)
{
Tgl = Alocar(a,m);Ts = Alocar(a,m);Tr = Alocar(a,m);
long int i,j,k;
for(j=0;j<m;j++)
{
// inicialização das temperaturas
Tgl[0][j]=Tgl0;
//condições iniciais de temperatura na fase fluida
Ts[0][j]=Tgl0; //condições iniciais de temperatura na fase sólida
Tr[0][j]=Tr0; //condições iniciais de temperatura na fluido refrigerante
}
for(k=0;k<a;k++){
for (j=1;j<=m-1;j++) {
// nós internos
Tgl[k+1][j]=Tgl[k][j]*(1-2*nad[1]-nad[2]-nad[3])+Tgl[k][j-1]*(nad[0]+nad[1])+Tgl[k][j+1]*(-nad[0]+nad[1])+nad[2]*Ts[k][j]+nad[3]*Tr[k][j];
}
}
Liberar(a,m,Tgl);Liberar(a,m,Ts);Liberar(a,m,Tr);
} o programa não roda até o valor final de a, por exemplo, para a=240, o programa só roda até a=226 e é retornado um segmentation fault. Se eu disser que a=226, ele so rodará para um valor de a=200, irá me rotornará um segmentation faul também, ou seja, não importa o valor de o for nunca chega até o final.....e eu prciso fazer esse programa rodar de todo jeito. isso será um trabalho que vai para um congresso de engenharia química. help me please?!?!?!?!?