Programación General => C/C++ => Mensaje iniciado por: Tempa en Domingo 5 de Junio de 2011, 11:54
Título: Problema Segmentation Fault
Publicado por: Tempa en Domingo 5 de Junio de 2011, 11:54
Hola,
Estoy trabajando con arreglos de 4 dimensiones y estoy definiendo los arreglos con la funcion malloc. Sin embargo, cuando incremento el tamano de alguno de los elementos, obtengo un segmentation fault pero no logro conseguir el por que. A continuacion pondre como defini mi funcion a ver si alguien puede ayudarme:
De esta manera defino lasa matrices: double ****Fd, ****Fdnew; double ****gxFd, ****gxFdnew; double ****gyFd, ****gyFdnew; double ****gvxFd, ****gvxFdnew; double ****gvyFd, ****gvyFdnew;
Y esto las uso en una funcion como la siguiente: void Init(double**** Fd, double**** gxFd, double****gyFd, double**** gvxFd, double**** gvyFd, double**** FIn, double**** gxFIn, double**** gyFIn, double**** gvxFIn, double**** gvyFIn, double**** Fo, double****Fo1, double* Vx, double* Vy, double nx) { int i, j, p, q;
for(i=0; i<=xmax+1; i++){ //Inicialmente lleno TODO x for(j=0; j<=ymax+1; j++){ for(p=0; p<=2*Nmax+1; p++){ for(q=0; q<=2*Mmax+1; q++){
Fo[j][p][q]= nx*(me/(2.0*Pi*k*Tg))*exp(-(me*((Vx[p]*Vx[p])+(Vy[q]*Vy[q]))/(2.0*k*Tg))); Fo1[j][p][q]= nx*(me/(2.0*Pi*k*Tg))*exp(-(me*(((Vx[p])*(Vx[p]))+(Vy[q]*Vy[q]))/(2.0*k*Tg))); //Fo desplazado pero tg
//Injection Function at the Inlet of the channel FIn[j][p][q]= nx*(me/(2.0*Pi*k*Tei))*exp(-(me*(((Vx[p]-Vx[33])*(Vx[p]-Vx[33]))+(Vy[q]*Vy[q]))/(2.0*k*Tei))); gxFIn[j][p][q]= 0.0; gyFIn[j][p][q]= 0.0; gvxFIn[j][p][q]= -((2.0*me*((Vx[p]-Vx[33])))/(k*Tei))*nx*sqrt(me/(2.0*Pi*k*Tei))*exp(-(me*(((Vx[p]-Vx[33])*(Vx[p]-Vx[33]))+(Vy[q]*Vy[q]))/(2.0*k*Tei))); gvyFIn[j][p][q]= -((2.0*me*(Vy[q]))/(k*Tei))*nx*sqrt(me/(2.0*Pi*k*Tei))*exp(-(me*(((Vx[p]-Vx[33])*(Vx[p]-Vx[33]))+(Vy[q]*Vy[q]))/(2.0*k*Tei)));//*/
Se que es un poco tedioso. El programa funciona bien si xmax vale 50 o incluso con 60 funciona. El error se mantiene aun usando una computadora de mayor capacidad asi que no creo que ese sea el problema.
Título: Re: Problema Segmentation Fault
Publicado por: Epa en Martes 7 de Junio de 2011, 17:30
Buenas
Los bucles estan mal, las dos primeras dimensiones tienen Matriz[ymax+2][xmax+2], pero la estas recorriendo Matriz[0 a xmax][0 a ymax]
Código: C
for(i=0; i<=xmax+1; i++){//Inicialmente lleno TODO x
for(j=0; j<=ymax+1; j++){
for(p=0; p<=2*Nmax+1; p++){
for(q=0; q<=2*Mmax+1; q++){
eso trandria que ser
Código: C
for(i=0; i<=ymax+1; i++){//Inicialmente lleno TODO x