Programación General => C/C++ => Visual C++ => Mensaje iniciado por: Epa en Sábado 27 de Noviembre de 2010, 03:03
Título: Error: el puntero toma el valor 0xffffffff de la anda
Publicado por: Epa en Sábado 27 de Noviembre de 2010, 03:03
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
struct s{
char*name;
int id;
int c;
char**dNames;
int*dIds;
}
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:
for(int k =0;(k < _tc)&&(tasks[i].dIds[j]==-1); k++)
{
if(!strcmp(tasks[i].dNames[j], tasks[k].id))
tasks[i].dIds[j]= tasks[k].id;
}
}
}
_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
Título: Re: Error: el puntero toma el valor 0xffffffff de la anda
Publicado por: Eternal Idol en Sábado 27 de Noviembre de 2010, 12:42
Para probarlo sin el codigo completo es muy dificil pero nadie mejor que vos podra depurarlo y ver cual es relmente el problema.
Título: Re: Error: el puntero toma el valor 0xffffffff de la anda
Publicado por: m0skit0 en Sábado 27 de Noviembre de 2010, 15:43
-1 = 0xFFFFFFFF
Título: Re: Error: el puntero toma el valor 0xffffffff de la anda
Publicado por: Epa en Sábado 27 de Noviembre de 2010, 16:48
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
Título: Re: Error: el puntero toma el valor 0xffffffff de la anda
Publicado por: Epa en Sábado 27 de Noviembre de 2010, 17:19
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:
Título: Re: Error: el puntero toma el valor 0xffffffff de la anda
Publicado por: m0skit0 en Sábado 27 de Noviembre de 2010, 21:51