2010-03-26 6 views
0

Hé, les gars, je commence juste à envelopper ma tête autour de l'objectif C et je fais un petit projet sur Iphone. Et je viens de rencontrer un problème étrange. J'ai dû faire face à des images dans mon programme donc j'ai beaucoup de variables locales déclarées comme temp [largeur] [hauteur]. Si je n'utilise pas NSThread pour effectuer le traitement d'image, tout fonctionne correctement. Cependant, si j'utilise NSThread, il continuera à me donner EXC_BAD_ACCESS à chaque fois que j'essaie d'accéder à un tableau à deux dimensions déclaré comme temp [widht] [height]. Je dois donc allouer de la mémoire à partir de tas pour avoir un tableau à deux dimensions. Cela résoudra le problème mais je ne comprends toujours pas. Ma première pensée serait d'empiler sur le flux, mais cela a bien fonctionné avec un fil. Je ne comprends pas.Fil et tableau bidimensionnel dans l'objectif C?

+0

Je pense que nous avons besoin de voir un exemple spécifique. – AnthonyLambert

+2

S'il vous plaît code postal. –

Répondre

0

Il se peut que la méthode à laquelle le tableau est local se termine avant que le thread ne soit terminé avec le tableau, ainsi votre tableau est hors de portée et la mémoire occupée est utilisée pour autre chose. Mais votre thread ne le sait pas et accède à la mémoire malgré tout.

+0

Y at-il de toute façon faire face à ce genre de problème? Je ne suis pas sur le multithread ... – user302581

+1

le multithreading est très compliqué, et il y a beaucoup de problèmes à traiter (conditions de course, blocage, etc.) - vous pourriez vouloir lire sur ceux-ci. Pour ce problème spécifique, vous devez allouer des ressources partagées sur le tas ou, de préférence, utiliser des objets Objective-C tels que NSArray (qui sont alloués sur le tas de toute façon). – shosti

+0

Merci les gens! J'ai trouvé le problème. C'était pile sur le flux. J'ai créé un tableau en 1-D et j'ai essayé d'y accéder mais je ne l'ai toujours pas fait. Et puis je l'ai fait plus petit et ça a marché. Je pense que soit définir la taille de la pile en appelant la méthode avant d'ajouter le thread ou allouer de la mémoire à partir du tas le ferait fonctionner. Pas sûr par défaut combien de mémoire de pile a été allouée pour le fil. – user302581

Questions connexes