• Jueves 2 de Mayo de 2024, 22:46

Autor Tema:  Error: el puntero toma el valor 0xffffffff de la anda  (Leído 2438 veces)

Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Error: el puntero toma el valor 0xffffffff de la anda
« en: Sábado 27 de Noviembre de 2010, 03:03 »
0
buenas, tengo un problema algo urgente.
haber si alguien me puede dar una mano, porque la verdad no tengo idea que es lo que pasa.

la cosa es que tengo una estructura

Código: C
  1. struct s{
  2.   char *name;
  3.   int id;
  4.   int c;
  5.   char **dNames;
  6.   int *dIds;
  7. }
  8.  

y creo un vector dinamico con esa estrucura, y lo completo a partir de un archivo xml.

los campos dNames y dIds con vectores dinamicos de los name e ids de otros elementos del mimso vector. y c es la cantidad de elementos de estos.

al cargar los datos solo cargo los campos id, name y dNames.
y la idea es completar el vector de enteros segun el id del name que le corresponde segun la posicion en el vector.

un caso concreto que estoy porbando es el siguiente:

hay 4 elementos en el vector con los siguientes valores
1
name = "name1"
id = 0
dNames = NULL
c = 0

2
name = "name2"
id = 1
dNames = {"name1"}
c = 1

3
name = "name3"
id = 2
dNames = {"name1"}
c = 1

4
name = "name4"
id = 3
dNames = {"name2", "name3"}
c = 2

y la idea es completar los dIds con los siguientes valores:

1
dIds = NULL
2
dIds = {0}
3
dIds = {0}
4
dIds = { 1, 2}

para lo que estoy usando el siguiente algoritmo:

Código: C++
  1.  
  2. for(int i = 0; i < _tc; i++)
  3. {
  4.    for(int j = 0; j < tasks[i].c; j++)
  5.    {
  6.       tasks[i].dIds[j] = -1;
  7.       for(int k = 0; (k < _tc) && (tasks[i].dIds[j] == -1); k++)
  8.       {
  9.          if(!strcmp(tasks[i].dNames[j], tasks[k].id))
  10.             tasks[i].dIds[j] = tasks[k].id;
  11.       }
  12.    }
  13. }
  14.  
  15.  
_tc es el tamaño del vector, 4 en este caso


El problema surge cuando i toma el valor 3, o sea el cuarto elemento al hacer el strcmp sale un error de una dll de ms.
Y al debugearlo me sale que el valor de tasks[3].dNames[0] es 0xffffffff

Lo mas extraño es que antes de entrar en los bucles imprimo tasks[3].dNames[0] y me sale "name2" que es lo que corresponde.

Alguien tiene una idea de que es lo que esta pasando?

Agradeceria cualquier aporte por minimo que sea.

Y si alguien quere perder 5 minutos para probar si le pasa lo mismo estaria eternamente agradecido.

Saludos
The sweet smell of a great sorrow lies over the land.


Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Error: el puntero toma el valor 0xffffffff de la anda
« Respuesta #1 en: Sábado 27 de Noviembre de 2010, 12:42 »
0
Para probarlo sin el codigo completo es muy dificil pero nadie mejor que vos podra depurarlo y ver cual es relmente el problema.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Error: el puntero toma el valor 0xffffffff de la anda
« Respuesta #2 en: Sábado 27 de Noviembre de 2010, 15:43 »
0
-1 = 0xFFFFFFFF

Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Re: Error: el puntero toma el valor 0xffffffff de la anda
« Respuesta #3 en: Sábado 27 de Noviembre de 2010, 16:48 »
0
Cita de: "Eternal Idol"
Para probarlo sin el codigo completo es muy dificil pero nadie mejor que vos podra depurarlo y ver cual es relmente el problema.

Seguro, pero el problema es que depurandolo instruccion a instruccion, el puntero cambia el valor solo de la nada, yo supongo que es la magia de microsoft, pero no encuentro forma de solucionarlo. La verdad que no dan muchas ganas de tener que reescribir 400 lineas para cambiar la logica.

Algo que me olvide de comentar, que quizas puede tener que ver, es que el modulo tiene su propia heap, creada con HeapCreate y todas las reservas de memoria se hacen con HeapAlloc, puede que eso tenga algo que ver?

Cita de: "m0skit0"
-1 = 0xFFFFFFFF

Los punteros no tienen signo que yo sepa.

Gracias por las respuestas

Saludos


Editoo

Cita de: "m0skit0"
-1 = 0xFFFFFFFF

No habia entendido la idea, ahora reviso si se me escapa el puntero en algun lado.

Gracias
The sweet smell of a great sorrow lies over the land.


Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Re: Error: el puntero toma el valor 0xffffffff de la anda
« Respuesta #4 en: Sábado 27 de Noviembre de 2010, 17:19 »
0
jaja, este es uno de esos momentos en que uno se siente el mas b****o del mundo.

Cita de: "m0skit0"
-1 = 0xFFFFFFFF

se me escapo un heaprealloc y dNames y dIds apuntaban al mismo lugar -.-

Gracias por la ayuda  :good:  :good:

y yo que le echaba la culpa a M$  :ph34r:
The sweet smell of a great sorrow lies over the land.


m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Error: el puntero toma el valor 0xffffffff de la anda
« Respuesta #5 en: Sábado 27 de Noviembre de 2010, 21:51 »
0
^_^  ;)  :comp: