Perché questa inizializzazione puntatore-puntatore segna un errore?
-
20-08-2019 - |
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);
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.