Domanda

Creo un puntatore a puntatore di un oggetto di classe e quando provo a creare un nuovo oggetto usando i puntatori segna i guasti. Perché succede?

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);     

}

Il costruttore di classi di soldato:

Soldier(int, int, int, int);
È stato utile?

Soluzione

Con il costruttore Soldier vuoto il tuo codice funziona bene (ad eccezione di errori di battitura corretti, come lettere minuscole level.soldier[])

Pubblica il corpo del costruttore.

Altri suggerimenti

Non riesco a trovare alcun problema relativo alla segfault nel tuo codice.

Ma sono confuso sul perché la tua distinzione tra maiuscole e minuscole non corrisponde:
La classe si chiama & Quot; Soldato & Quot; e il Soldato ** si chiama " soldato " ;.

Ma scrivi:

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

e

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

Se il codice si compila davvero come l'hai scritto, questo potrebbe essere il problema.

Forse i >= level.SoldierCount?

Qual è il valore di level.SoldierCount? Qual è il valore di i

L'unico modo in cui può verificarsi un segfault è se si accede alla memoria non allocata. Nella riga che hai evidenziato, l'unico posto che può accadere è nell'array (o all'interno del costruttore, per il quale non hai inserito il codice). Molto probabilmente, stai accedendo all'array senza limiti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top