2010-10-06 7 views
0

J'essaye d'employer C/C++ (de préférence C) pour énumérer le registre de Windows entier, j'utilisais la récursion pour faire ceci mais je continue à courir dans des débordements de pile, que je comprends mais je ne peux pas penser à faites ceci sans recusion. Des conseils sur la façon de le faire sans récursion serait génial, merci.Recherche de registre

+2

Qu'avez-vous réellement essayé [où est votre code]? – jacknad

Répondre

2

Tant que votre récursion est juste une fois par niveau de sous-clé, I Je ne vois pas pourquoi cela devrait déborder la pile. Bien sûr, le registre de Windows est un cauchemar, mais je ne pense pas que ses hiérarchies de clés soient profondes de plusieurs milliers de niveaux.

Je suppose que vous utilisez des tableaux géants sur la pile, ce qui est une mauvaise idée en général, mais surtout avec la récursivité. Essayez d'allouer toutes les grandes données dont vous avez besoin avec malloc à la place.

+0

+1. Je l'ai fait avec la récursivité moi-même et n'ai eu aucun problème. – casablanca

0

Une recherche de pain d'abord serait une possibilité évidente. L'idée de base est d'utiliser une file d'attente pour chercher. Commencez par mettre la racine dans la file d'attente, puis répétez les étapes suivantes jusqu'à ce que la file d'attente soit vide:

  1. Obtenez un élément de la file d'attente.
  2. Énumérer son contenu.
  3. Ajouter les liens qu'il contient à la file d'attente.

... où « liens » seraient « sous-répertoires » pour un système de fichiers, « sous-clés » pour le registre, etc.

+0

Cela semble fonctionner, avez-vous des liens vers des tutoriels ou un exemple de code que je pourrais utiliser? Parce que je n'ai aucune idée de ce dont vous parlez :) – Josh

+0

Je ne peux pas penser à tout de suite de toute façon. Pardon. –