Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

391
Vistas
Buena manera de depurar la corrupción del valor de la pila

¿Cuál es una buena manera de depurar la corrupción del valor de la pila? En un programa mío, a veces la dirección de este puntero cambia después de que regresa un método que cierra un descriptor de archivo. Depuré el programa durante horas pero no puedo encontrar el problema.

¿Cuál es un buen método para averiguar qué cambia la dirección de este puntero? Cuando agrego manualmente un reloj en este puntero, el error no ocurre. El error todavía ocurre cuando elimino mi código tanto como sea posible. Probé Valgrind pero no encuentra ninguna corrupción de pila temprana.

Logré detectar cuando ocurre el error, compilé el código en modo de 64 bits. La dirección de este cambió de 0xxxxxxx a 0x1000000xxxxxxx. Verifico la dirección de esto en los métodos donde ocurre el error, que descubrí cuando cambia la dirección (ver el primer párrafo para esto).

¿Hay alguna otra forma de averiguar la causa de este problema?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Es posible que desee probar address-sanitizer . Está disponible en gcc 4.8 :

Se ha agregado AddressSanitizer, un detector rápido de errores de memoria, y se puede habilitar a través -fsanitize=address . Las instrucciones de acceso a la memoria se instrumentarán para detectar el desbordamiento del almacenamiento dinámico, la pila y el búfer global, así como los errores de uso después de la liberación. Para obtener seguimientos de pila más agradables, use -fno-omit-frame-pointer . AddressSanitizer está disponible en IA-32/x86-64/x32/PowerPC/PowerPC64 GNU/Linux y en x86-64 Darwin.

En GCC (pero aparentemente no clang), debe especificar -fsanitize=address tanto en los indicadores del compilador como en los indicadores del vinculador, como se describe en esta respuesta relacionada .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda