2009-01-28 9 views
-1

Je crée un pointeur vers un pointeur d'un objet de classe et lorsque j'essaie de créer un nouvel objet en utilisant les pointeurs, il seg-faults. Pourquoi cela arrive-t-il?Pourquoi cette initialisation Pointeur-Pointeur Seg Seg?

struct Level 
{ 
     int SoldierCount; 
     Soldier **soldier; 
     int taskCount; 
     int *taskPercentage; 
     int *taskBitmapX; 
     int *taskBitmapY; 
}level; 

void createMap() 
{ 
    //Input and Declartion of various variabls goes here 

    level.soldier = new Soldier* [level.SoldierCount]; 

    //Seg Faults Here 
     level.Soldier[i] = new Soldier(initX, initY, initDirection, steps);  

} 

Classe Soldat Constructor:

Soldier(int, int, int, int); 
+0

Pouvez-vous également fournir votre constructeur Soldier? –

Répondre

2

Avec vide Soldier constructeur de votre code fonctionne très bien (sauf pour les fautes de frappe corrigées, comme minuscules level.soldier[])

S'il vous plaît poster le corps du constructeur.

+0

Le constructeur était le problème, je l'ai regardé pendant tout ce temps. Merci. – strider24

2

Je ne trouve pas de problèmes liés à la segfault dans votre code.

Mais je suis confus quant à pourquoi votre sensibilité à la casse ne correspond pas:
La classe est appelée « Soldat » et le soldat ** est appelé « soldat ».

Mais vous écrivez:

level.soldier = new soldier* [level.SoldierCount]; 

et:

level.Soldier[i] = new Soldier(initX, initY, initDirection, steps); 

Si le code compile vraiment comme vous l'avez écrit, cela pourrait être le problème.

+0

Mon mauvais. Corrigé le code maintenant. – strider24

+0

Toujours copier/coller le code source lorsque vous le montrez à d'autres personnes. Si nous ne pouvons pas être sûrs que le code que vous avez posté est le code que vous avez, comment pouvons-nous éventuellement répondre à la question? Copiez/collez, pour ne pas introduire de fautes de frappe ou d'autres erreurs qui ne sont pas présentes dans le code que vous utilisez. – jalf

+0

Je jouais avec le démarquage et je me suis trompé. Pardon. – strider24

0

Quelle est la valeur de level.SoldierCount? Quelle est la valeur de i

La seule façon dont un segfault peut se produire est d'accéder à la mémoire non allouée. Dans la ligne que vous avez mise en surbrillance, le seul endroit qui peut arriver est dans le tableau (ou dans le constructeur, pour lequel vous n'avez pas publié le code). Très probablement, vous accédez au tableau hors limites.

1

Peut-être i >= level.SoldierCount?