Pregunta

Cuando corro STLport sobre Darwin me sale un accidente extraño. (No he visto en ningún otro lugar que en Mac, pero exactamente lo mismo accidente tanto en i686 y PowerPC.) Esto es lo que parece en GDB:

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: 13 at address: 0x0000000000000000
[Switching to process 21097]
0x000000010120f47c in stlp_std::__node_alloc_impl::_M_allocate ()

Puede ser cierto ajuste en STLport, he notado que Mac.h y MacOSX.h parecían muy por detrás de las características. También sé que debe haber algún tipo de condición de carrera, ya que no se produce simplemente por llamar a este método (denominado implícitamente). El accidente ocurre principalmente cuando empujo el sistema, ejecutando 10 hilos simultáneos que hacen un montón de manejo de cadenas.

Otras teorías se me ocurren tienen que ver con las opciones del compilador (de script configure) y g ++ 4.2 insectos (parece que no se 4.4.3 en Mac sin embargo, con el apoyo de Objective-C, lo que necesito vínculo con).

HELP !!! )

Editar : corro pruebas unitarias, que hacen todo tipo de cosas. Este problema surge cuando comienzo a 10 hilos que empujan el sistema; y siempre se reduce a std :: string :: append que con el tiempo se reduce a _M_allocate. Ya que no puedo incluso conseguir un vertedero descenso del código que está causando el problema, supongo que estoy haciendo algo mal. Podría ser así, ya que está tratando de ejecutar al puntero de instrucción 0x000 ... 000? Dynlibs están construidos como DLL en Windows con una tabla de saltos? ¿Será acaso que dicha mesa de un salto ha sido sobrescrito por alguna razón? Eso probablemente explicar este comportamiento. (El código es enorme, si se me acaban las ideas de otros, voy a publicar un mínimo estrellarse muestra aquí.)

¿Fue útil?

Solución 2

Este problema se debe a una no relacionada error grave , haciendo memoria sobrescribe dando lugar a un accidente STLport en mi caso.

Otros consejos

hmm .. usos STLport allocaters que tarda la memoria plataforma y piscina internamente a las estructuras de datos cuando sea necesario.

Sólo cheque cuando el accidente ocurre, el montón dado al hilo de ejecución es suficiente para un alloc suceda. Incluso si falla un alloc, este accidente puede ocurrir.

No estoy seguro acerca de la granularidad del asignador STL en la configuración actual que se está trabajando. Compruebe stl_config.h para eso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top