dans mon application, je suis en train de traiter une image YUV422 à partir d'une webcam. mais je reçois une énorme fuite de mémoire. ci-dessous vous pouvez voir un exemple de code simplifié de mon application. si je désactive la ligne "(m1 ..." dans la fonction, il n'y a pas de fuite. (mais les images ne sont pas en cours de traitement.) J'ai essayé les verrous, les piscines, etc mais rien n'a changé. au cacao donc tous ces crochets semblent drôles/effrayants pour moi ;-)
est-ce un problème avec l'utilisation de "char"? dans mon ancienne application linux + C++ il n'y avait pas de problème. mais j'utilisais "unsigned char *", pas de fils, et je ne l'ai jamais vérifié les fuites ...- (void) processImage: (char *) image; --- char * provoque une fuite de mémoire?
global:
...
char m [640*480];
"principale":
...
[NSThread detachNewThreadSelector:@selector(processOutputBuffer) toTarget:self withObject:nil];
...
function1:
- (void)processOutputBuffer {
[NSThread setThreadPriority:0.4];
[lock lock];
...
Ptr outputBufferBaseAddress = (Ptr)CVPixelBufferGetBaseAddress(outputBuffer);
CVPixelBufferLockBaseAddress(outputBuffer, 0);
[self yuv422_to_y8uv8:outputBufferBaseAddress m1:m];
...
}
fonction2:
- (void) yuv422_to_y8uv8:(char *)image m1:(char *)m1 {
int x,y;
for (y = 0; y < 480; y++)
for (x = 0; x < 640; x++)
{
*(m1 + (640 * y) + (x))=*(image + (640*2 * y) + (x*2)+1);
}
}
analyseur statique trouvé quelques problèmes, mais aucun avec les fuites; instruments (v1.5 de xcode v3.1) trouvé une énorme fuite (seulement quand cette ligne a été activée) mais ...... il a dit que CVObject prend 496 B (cela n'a pas de sens pour moi parce que ce particulier la ligne ne contient aucun CVObject (quel qu'il soit)) LeakedBlocks> XxXXXXXHistory> Catégorie = CVObject, EventType = malloc, taille = 496, ResponsibleLibrary = CoreVideo, ResponsiblCaller = CVObject :: alloc (.. long, ..const , ..long, ..long) ..... merci de vos suggestions ..... – ravyr
496 octets n'est pas une "énorme fuite". Essayez de trier la liste par nombre net d'objets, puis recherchez les classes qui ne sont ni Cocoa ni Core Foundation. –
merci pour votre réponse. ça m'a beaucoup aidé - j'ai enfin commencé à chercher dans la bonne direction en utilisant les bons outils ... #net n'a pas montré la fuite tout comme j'ai confondu la 496B avec la "fuite énorme" .. mais en observant un autre instrument Courir en cours d'exécution, j'ai remarqué qu'il y a "GeneralBlock-618496" avec un nombre de # net relativement faible, mais NetBytes géant - après 1 minute plus de 500Mo. ReponsibleCallers de ces instances sont: CVPixelBufferBacking :: initWithPixelBufferDescription (...) alors maintenant je sais que j'étais perdu, et je suppose que je suis de retour sur la bonne voie maintenant ;-) – ravyr