L'ABANDON: TAS de CORRUPTION de la MÉMOIRE sur NDK env. POCO (Bibliothèque, Sqlite3, Cocos2dx)
Je suis face à 'ABORTING: HEAP MEMORY CORRUPTION'
problème sur Android NDK
environnement.
Si je backtrace avec ndk-gdb
, elle est surtout présente sur malloc/dlfree
fonctions dans libc.so
et après de longues heures de localiser le problème, il arrive le plus souvent, à l'intérieur de sqlite3_xxx
appels de fonction, absolument fonctionne bien sur les iOS
env.
Je n'arrive pas à trouver où je dois aller en profondeur.
Quelqu'un a rencontré le même problème et fixe?
Avez-vous résoudre ce problème? Je suis frapper le même problème
OriginalL'auteur Locke | 2013-03-05
Vous devez vous connecter pour publier un commentaire.
J'ai vu des problèmes de mémoire, mais pas
'ABORTING: HEAP MEMORY CORRUPTION'
que vous signalez.Vous devez trouver la tas est corrompu: le code Java ou le C/C++. Ou peut-être votre sql. Si le journal n'est pas informatif, vous pouvez essayer de localiser le message d'erreur dans les fichiers binaires.
Si c'est le C/C++ tas, ce qui a fonctionné pour moi a été le remplacement de la norme malloc/calloc/libre avec mes propres versions.
et ainsi de suite; myMalloc() et ses amis imprimer les informations de débogage, de sorte que vous pouvez savoir où la mémoire a été allouée et libéré. J'ai eu de la source de la bibliothèque et pourrait compiler. Ensuite, la journalisation, l'exploitation forestière, l'exploitation forestière...
J'ai aussi fait myMalloc() zéro de la mémoire allouée -- en tout cas. Une autre astuce consiste à allouer une plus grande chuck et de mettre un garde de la valeur à la fin de celui-ci. Si cette valeur est corrompu, vous voyez.
Si c'est le segment Java, vous aurez à votre journal des appels de fonction native (je n'ai jamais vu de problèmes dans le tas Java, Java se plaint de son JNI spécifique des choses).
BTW, j'ai choisi sale façon d'écrire les logs pour vérifier si le code se bloque et j'ai trouvé que j'ai été halluciné par la trace de la pile. L'endroit où le code se bloque en fait était l'appel à enqueueXXX de POCO::NotificationQueue classe. Je pense que j'ai fait une erreur dans les environs. Drôle que les appareils iOS ne s'est jamais plaint à ce sujet.
Jusqu'à maintenant, j'étais en supposant que il doit y avoir certaines options du compilateur ou d'autres paramètres de construction j'ai besoin de vérifier. Merci encore.
OriginalL'auteur 18446744073709551615
Pour mon programme, 'ABANDON: TAS de CORRUPTION de la MÉMOIRE" montre quand il y a des thread questions de sécurité. Spécifiquement avec Cocos2d-x cadre, son
getFileData()
fonction deZipUtils
peut se bloquer lors du chargement de.plist
atlas etaddImageAsync()
en même temps sur Android. Bien que les codes fonctionne très bien sur iOS.OriginalL'auteur lk_vc