J'ai un thread en cours d'exécution (OS X 10.10.5) qui se bloque avec cette trace de pile. C'est après environ 20 heures de fonctionnement, probablement lié à une condition de mémoire faible. Mais, la question est, pourquoi malloc ne retourne-t-il pas juste null? Pourquoi l'exécution du thread doit-elle s'arrêter? Le nombre réel d'octets requis est petit (pour une opération de chaîne sur un chemin).Pourquoi malloc ne revient-il pas?
std::wstring finalPath = itsPath.substr(0,ls+1);
1 operator new(unsigned long) + 37 (libc++abi.dylib + 124485) [0xa0339645] 2
1 malloc + 29 (libsystem_malloc.dylib + 3997) [0xa1829f9d] 2
1 malloc_zone_malloc + 116 (libsystem_malloc.dylib + 7243) [0xa182ac4b] 2
1 default_zone_malloc + 3 (libsystem_malloc.dylib + 67909) [0xa1839945] 2
*1 thread_exception_return + 0 (kernel + 632362) [0xffffff800029a62a] (runnable) 2
Le but de l'opération qui n'est d'effacer un répertoire temporaire de sorte que le disque de démarrage ne remplit pas les fichiers temporaires générés par le programme. Ce processus échoue, le disque se remplit en effet, le thread s'arrête (comme dans vraiment arrête, et le thread principal est joint à lui), et le processus de suppression des fichiers du disque s'arrête. En outre, le processus doit être arrêté car le thread est arrêté. Je ne sais pas si vous pourriez vraiment appeler cela un bug puisque le processus qui échoue est une tentative pour empêcher ce qui se passe réellement.
Nous vous remercions de vos commentaires.
* probablement lié à une condition de mémoire faible * - En d'autres termes, un bug dans votre programme. – PaulMcKenzie
@PaulMcKenzie, pourquoi sur Terre? Il existe de nombreux scénarios qui conduisent à des conditions de mémoire faible sans aucun bogue. – SergeyA
Il ne semble pas que vous appeliez 'malloc' directement mais à la place vous appelez' new'. 'new' est autorisé à lancer à moins que vous n'utilisiez' no throw', ce qui pourrait être le problème. – NathanOliver