malloc: *** error: suma de verificación incorrecta para el objeto liberado; probablemente el objeto se modificó después de liberarlo

5 minutos de lectura

Tengo un gran problema con mi aplicación iOS: a veces se bloquea sin un error de depuración detallado. El seguimiento de la pila está vacío. Estas son las únicas dos líneas en el seguimiento de la pila:

  1. Inicio de bloqueo en UIApplicationMain en “stub de símbolo para: -[_UIHostedTextServiceSession dismissTextServiceAnimated:]”.
  2. y reporte “libsystem_c.dylib`malloc_error_break”.

en com.apple.main-thread.

El error en el depurador Xcode (con dispositivo conectado):

malloc: *** error for object 0x208a7614: incorrect checksum for freed object - object was probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug

Establecí un punto de interrupción en malloc_error_break con libsystem_c.dylib sin ningún comentario del depurador. No tengo idea de resolver este problema.

  • Esto es duro. Básicamente tienes que inspeccionar el código para encontrar el problema. Si puede averiguar qué tipo de objeto está involucrado, eso ayuda mucho. (¿Por cierto, ARC o conteo de referencia manual?)

    – Lame caliente

    7 de noviembre de 2013 a las 18:41

  • Estoy bastante seguro de que la única utilidad de establecer un punto de interrupción en malloc_error_break es que le dará la oportunidad de mirar el objeto liberado corrupto, y el contenido de la memoria puede ayudarlo a rastrear el punto donde lo está sobrescribiendo.

    – Este no es mi verdadero nombre

    7 de noviembre de 2013 a las 19:45


  • Es una biblioteca de C++ y el proyecto es MRC.

    usuario2776543

    8 de noviembre de 2013 a las 7:48


  • Mi amigo compiló mi código C en una Mac y dio este error en tiempo de ejecución. Sin embargo, se compiló y funcionó bien en Linux. Parece ser un problema específico de Mac.

    – Geremia

    02/02/2016 a las 21:05


  • Intenta simplemente limpiar el proyecto CMD+SHIFT+K. Eso ayudo 🙂

    – korgx9

    26 de abril de 2018 a las 6:56

avatar de usuario
Pedro Soares

Para encontrar el origen del problema, en Xcode, vaya a Producto > Esquema > Editar esquema y, en la pestaña Diagnóstico, habilite todas las configuraciones de Malloc y Guard Malloc.

Con eso, ejecute su aplicación nuevamente y Xcode se detendrá en la línea que causa el problema.

Definición del esquema

  • Vale la pena señalar que Guard Malloc solo está disponible en el simulador y no en un dispositivo real. Ver: desarrollador.apple.com/library/ios/documentation/Performance/…

    – MBulli

    20 de enero de 2015 a las 23:19

  • dyld: no se pudo cargar la biblioteca insertada ‘/usr/lib/libgmalloc.dylib’ porque no se encontró la imagen

    – onmyway133

    3 mayo 2016 a las 14:02

  • Enable Guard Malloc funcionó para mí, aunque vale la pena señalar que parecía ralentizar significativamente el simulador, por lo que solo lo encendía cuando depuraba un problema real.

    – arcada bob

    04/07/2016 a las 22:32

  • Estoy usando macOS Big Sur 11.1, Xcode 12.3, cuando probé Xcode, Producto > Esquema > Editar esquema, no pasa nada, lo intenté varias veces, incluso reinicié y luego volví a intentarlo, lo mismo otra vez, no pasa nada.

    – Plato

    30 de diciembre de 2020 a las 15:49

avatar de usuario
usuario1118321

Ya que está en el depurador, debe mirar la ubicación de la memoria 0x208a7614 y ver lo que hay. Los datos en la memoria pueden ser útiles para descubrir qué está fallando.

Lo que sucede es uno de los siguientes:

  1. estás liberando un objeto dos veces,

  2. está liberando un puntero que nunca se asignó

  3. está escribiendo a través de un puntero no válido que anteriormente apuntaba a un objeto que ya estaba liberado

Dado que el seguimiento de la pila está vacío, podría ser útil agregar algunas declaraciones de registro de depuración a su código en varios lugares para ver si puede reducir en qué parte del código se encuentra el problema. Usar las herramientas de memoria en Instruments también podría ayudar. Podría intentar activar NSZombies, pero esto parece un problema de asignación de C y no uno de Objective-C.

Además, ¿hay algo más escrito en la consola antes del bloqueo? Si es así, puede indicarle de dónde proviene el problema.

  • Hay una tercera posibilidad sugerida por el mensaje de error: OP está escribiendo a través de un puntero no válido que anteriormente apuntaba a un objeto que ya estaba liberado.

    – R.. GitHub DEJA DE AYUDAR A ICE

    7 de noviembre de 2013 a las 16:32

  • Ah, buen punto. Estaba pensando que el error se mostraba en una llamada a free()pero está en una llamada a malloc(). Buena atrapada. Actualizaré el texto para reflejar eso.

    – usuario1118321

    7 de noviembre de 2013 a las 18:09

  • Cuarta causa posible: escribir más allá del final de un bloque asignado en otro bloque actualmente no asignado.

    – Este no es mi verdadero nombre

    7 de noviembre de 2013 a las 19:43


  • Si los zombis no atrapan nada, Guard Malloc puede ayudar.

    –Greg Parker

    7 de noviembre de 2013 a las 20:52

  • Esta respuesta es lo que me salvó en mi programa C. Accidentalmente asigné una matriz demasiado pequeña para contener un resultado de sprintf en otro lugar de mi código. Verificar la dirección de la memoria me dijo exactamente cuál era la cadena infractora porque pude reconocer su contenido.

    – sudo

    26/04/2014 a las 21:29


avatar de usuario
Ravi Raja Jangid

hola chicos, he encontrado esta solución si están usando la interfaz nib o xib y enfrentan este problema cuando quieren empujar un objeto del controlador de vista, en algún momento ocurrirá este error y su aplicación se bloqueará (especialmente error en iPad) Aquí está el solución:

// Formato como este

UINavigationController *nav=[[UINavigationController      alloc]initWithRootViewController:yourViewControllerObj];

[self.navigationController  presentViewController:nav animated:true completion:nil];

No intente empujar en esta condición.

Si tienes este problema. vaya a: producto->esquema->diagnóstico-> luego habilite borde de guardia mólico y objeto zombi
luego cierre, luego vaya producto-> detener y luego nuevamente producto-crear y ejecutar. la mejor de las suertes

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad