problema con funcion y variable en un programa
Publicado por opus (1 intervención) el 11/10/2010 08:24:57
EL problema es el siguiente. Pues hice un programa que resuelve sistemas de ecuaciones lineales nxn pero resulta que en una funcion donde realizo un pivoteo parcial mando dos variables y lo extraño es que una variable me la modifica de valor al entrar a un ciclo for y esto hace que en el arreglo multidimensional se salga de la memoria asignada y me cause un fallo de segmentacion lo depure con gdb y encontre el fallo pero no se por que diablos la variable cambia su valor si todo va bien y derrepente zaz!! cambia a un valor exagerado y no se que lo cause por favor ayuda!! como arreglo eso?? en seguida dejo el codigo y lo que me tira el gdb saludos!!
********************************************************************************
* Programa para Resolver Sistemas de Ecuaciones por el Metodo de Gauss-Jordan *
********************************************************************************
Tamaño de la Matriz Cuadrada: 4
Ecuacion 1
Dame el termino X1 : 0
Dame el termino X2 : 45
Dame el termino X3 : 8
Dame el termino X4 : 2
c1 : 47
Ecuacion 2
Dame el termino X1 : 85
Dame el termino X2 : 1
Dame el termino X3 : 2
Dame el termino X4 : 3
c2 : 45
Ecuacion 3
Dame el termino X1 : 11
Dame el termino X2 : 2
Dame el termino X3 : 2
Dame el termino X4 : 3
c3 : 1
Ecuacion 4
Dame el termino X1 : 4
Dame el termino X2 : 6
Dame el termino X3 : 8
Dame el termino X4 : 7
c4 : 9
El Sistema de Ecuaciones Es:
0x + 45x + 8x + 2x = 47
85x + 1x + 2x + 3x = 45
11x + 2x + 2x + 3x = 1
4x + 6x + 8x + 7x = 9
a=0
c=1
a1=0
c1=1
a1=0
c1=1
a1=0
c1=1
a1=0
c1=1
a1=1073741824
Fallo de segmentación (`core' generado)
ERROR DEL GDB
El núcleo se generó por «./gauss-jordan».
El programa terminó con la señal 11, Segmentation fault.
#0 0x000000000040172a in pivoteo (a=1073741824, c=0) at gauss-jordan.cpp:198
198 temp[0][j]=matriz[a][j];
(gdb) bt
#0 0x000000000040172a in pivoteo (a=1073741824, c=0) at gauss-jordan.cpp:198
#1 0x000000000040139b in analisis () at gauss-jordan.cpp:140
#2 0x00000000004010f0 in main () at gauss-jordan.cpp:92
(gdb)
FUNCION DONDE SE GENERA EL ERROR
int pivoteo(int a,int c)
{
int i,j;
double temp[0][n];
cout<<"\na="<<a;
cout<<"\nc="<<c;
for(j=0; j<=n; j++)
{
cout<<"\na1="<<a;
cout<<"\nc1="<<c;
temp[0][j]=matriz[a][j];
matriz[a][j]=matriz[c][j];
matriz[c][j]=temp[0][j];
}
return 1;
}
Como se puede ver en la variable "a" empeiza con el valor de de 0, entra al ciclo for y "a0" sigue en 0 pero al cabo de unas cuantas iteraciones del for cambia el valor a " a=1073741824" como se puede ver la depuracion con "couts" o con "gdb", lo cual en el arreglo hace que me genere un fallo de segmentacion de memoria y no se por que putas hace eso la variable alguien puede ayudarme se lo agradeceria gracias!
********************************************************************************
* Programa para Resolver Sistemas de Ecuaciones por el Metodo de Gauss-Jordan *
********************************************************************************
Tamaño de la Matriz Cuadrada: 4
Ecuacion 1
Dame el termino X1 : 0
Dame el termino X2 : 45
Dame el termino X3 : 8
Dame el termino X4 : 2
c1 : 47
Ecuacion 2
Dame el termino X1 : 85
Dame el termino X2 : 1
Dame el termino X3 : 2
Dame el termino X4 : 3
c2 : 45
Ecuacion 3
Dame el termino X1 : 11
Dame el termino X2 : 2
Dame el termino X3 : 2
Dame el termino X4 : 3
c3 : 1
Ecuacion 4
Dame el termino X1 : 4
Dame el termino X2 : 6
Dame el termino X3 : 8
Dame el termino X4 : 7
c4 : 9
El Sistema de Ecuaciones Es:
0x + 45x + 8x + 2x = 47
85x + 1x + 2x + 3x = 45
11x + 2x + 2x + 3x = 1
4x + 6x + 8x + 7x = 9
a=0
c=1
a1=0
c1=1
a1=0
c1=1
a1=0
c1=1
a1=0
c1=1
a1=1073741824
Fallo de segmentación (`core' generado)
ERROR DEL GDB
El núcleo se generó por «./gauss-jordan».
El programa terminó con la señal 11, Segmentation fault.
#0 0x000000000040172a in pivoteo (a=1073741824, c=0) at gauss-jordan.cpp:198
198 temp[0][j]=matriz[a][j];
(gdb) bt
#0 0x000000000040172a in pivoteo (a=1073741824, c=0) at gauss-jordan.cpp:198
#1 0x000000000040139b in analisis () at gauss-jordan.cpp:140
#2 0x00000000004010f0 in main () at gauss-jordan.cpp:92
(gdb)
FUNCION DONDE SE GENERA EL ERROR
int pivoteo(int a,int c)
{
int i,j;
double temp[0][n];
cout<<"\na="<<a;
cout<<"\nc="<<c;
for(j=0; j<=n; j++)
{
cout<<"\na1="<<a;
cout<<"\nc1="<<c;
temp[0][j]=matriz[a][j];
matriz[a][j]=matriz[c][j];
matriz[c][j]=temp[0][j];
}
return 1;
}
Como se puede ver en la variable "a" empeiza con el valor de de 0, entra al ciclo for y "a0" sigue en 0 pero al cabo de unas cuantas iteraciones del for cambia el valor a " a=1073741824" como se puede ver la depuracion con "couts" o con "gdb", lo cual en el arreglo hace que me genere un fallo de segmentacion de memoria y no se por que putas hace eso la variable alguien puede ayudarme se lo agradeceria gracias!
Valora esta pregunta


0