Dev - C++ - problema con funcion y variable en un programa

 
Vista:

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!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:problema con funcion y variable en un programa

Publicado por Capitan Kirk (48 intervenciones) el 13/10/2010 08:38:27
Las posibles causas del error que veo son:

1) ¿Cuánto vale n al entrar a la función? Me refiero a la declaración de temp.

2) Dado que hablamos de resolución de sistemas de ecuaciones, supongo que n es el número de ecuaciones del sistema. En el bucle vas desde 0 hasta n inclusive (for j=0; j<=n; j++), con lo que estás utilizando un total de n+1 valores. En C/C++, los índices de un array de n elementos van desde 0 hasta n-1. Deberías haber puesto

for (j=0; j<n; j++)

Esta es la causa más probable del error. Al ir más allá del espacio asignado a esos arrays, estás moviendo datos que no sabes a qué corresponden, con lo que provocas el desastre.

Un par de consideraciones adicionales:

1) La declaración

double temp[0][n]

es equivalente a

double temp[n]

ya que estamos hablando de una sola fila.

2) No necesitas declarar temp como array, ya que el intercambio lo estás haciendo elemento por elemento.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar