Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Error impredecible de instruccion en memoria (https://www.clubdelphi.com/foros/showthread.php?t=74461)

mizzard 21-06-2011 17:31:37

Error impredecible de instruccion en memoria
 
Hola a todos, hace dias que observo que tengo un error que surge de forma aleatoria, pero siempre cuando pulso un boton que ejecuta unas determinadas funciones.

Entrando en detalle, el botón desactiva unos elementos que tengo en el formulario principal (cosa donde no veo problema) y notifica al dispositivo USB que se apague, y acto seguido cierro la comunicación.

No sabría decir cuándo obtengo este error porque por más que lo intento provocar no consigo que salga para darme cuenta en qué linea sale, ya que como comento, la acción que realiza el botón no es nada raro, lo más que me hace sospechar es cuando cierro la comunicación usb pero vamos tampoco estoy seguro.

Esa acción la realizo en otros momentos y sí que funciona, por lo que mi grado de incertidumbre es aun mayor.

Mirando por internet dicen q puede deberse a un problema de algun puntero mal referenciado.

Mi pregunta es si efectivamente el error se puede deber a esto o si puede deberse a otra cosa.

Si es por problemas de punteros, lo único asi que me hace dudar que pueda pasar es cuando llamo a la funcion que la tengo en otro .cpp

Esta es la funcion que tengo en MiLibreria.cpp
Código:

int apagarLector(char softwareID) {
...
}

y asi es como la llamo:

pongo un include
#include "MiLibreria.cpp"

Código:

resp= apagarLector(miChar);
donde miChar lo tengo en un define en MiLibreria.h

Alguna idea de por qué se puede producir este error?


Cualquier comentario sera bienvenido!, un abrazo!

mizzard 21-06-2011 17:34:43

He capturado el error en diferentes ejecuciones, lo muestro en el JPG

Chris 21-06-2011 17:49:30

Efectivamente el error parece ser por punteros. Pero con más insertidumbre que la tuya nos dejas porque no proporcionas suficientes datos.

Yo te aconsejaría que revisaras las operaciones con punteros que estés realizando.

Saludos,
Chris

roman 21-06-2011 17:58:59

Pues como dice Chris, es difícil saber qué pasa sin mayores datos. Pero podrías ver de qué forma se accede al dispositivo USB. Posiblemente "algo" en tu código sigue intentando acceder aún cuando tú ya lo apagaste.

// Saludos

escafandra 21-06-2011 22:32:11

Indudablemente el problema está en un puntero. Posiblemente en el uso de uno no inicializado correctamente, o que apunta descontroladamente.

Con el código que expones no se puede saber. No es problema que usas un archivo.cpp realizando #include "MiLibreria.cpp" o añadiendolo en el proyecto, es lo mismo. Ese no es el origen del problema.

Es posible que el error esté en el código de MiLibreria.cpp. ¿Lo escribiste tu o llama a funciones de alguna dll?

Revisa el código paso a paso, asignaciones de puntero, objetos que se usan sin estar creados, sumas con punteros, cierre prematuro de Handles... Piensa que el error no tiene que saltar justo en el punto de un código erróneo sino mas tarde. Depurar los errores de punteros no siempre es fácil, debes ser muy cuidadoso a la hora de escribir el código.

Saludos.

mizzard 22-06-2011 12:35:00

Hola, ante todo muchas gracias por las respuestas, perdonad si apenas he expuesto codigo, lo que pasa es que realizo muchas tareas y claro poner todas implica mucho detenimiento y un hilo demasiado largo....


He estado realizando numerosas pruebas y como el error sale de forma inesperada, no puedo detallar exactamente el motivo por el cual sale, ya que parece ser q no es solo usb... aunque no lo tengo claro.


Mi idea principal era preguntar cual podria ser el origen del error, si es por tema de punteros ya se por donde echarle un ojo.

Otra cosa que he observado, es que si compilo mi programa para poder ser usado en otra máquina (sin las dependencias) y ejecuto el exe, he estado un rato "puteandolo" intentando simular las secuencias q provocaban el error y por el momento no he visto que apareciese.

Mi pregunta es (a falta de seguir haciendo pruebas antes de sacar conclusiones precipitadas), ¿es posible que en modo debug salgan estos errores (compilando con dependencias) y cuando se compila sin dependencias y se ejecuta el exe sin ejecutar el c++Builder no aparezcan estos errores?

No se si tiene mucho sentido la pregunta, es simplemente por ir descartando.


PD: Ahora me ha salido el error.... :( (yo que me habia hecho ilusiones)... ¿Sería interesante probarlo en otro pc?, lo digo pq el mio que es en donde estoy desarrollando el proyecto, a veces me da problemillas y se me queda colgado... o este tipo de errores implica revisar el codigo muy muxo pq tb saldra en la otra máquina??


Muchisimas gracias y un abrazo!


La franja horaria es GMT +2. Ahora son las 21:38:36.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi