Ah, l'éternel sigsev...le terrible, le redouté sigsev.
Il n'y a pas quarante solutions. Lance le debugger, exécute le programme pas-à-pas, et au moment où ça plante, trouve l'erreur.
SIGSEV apparaît dans les cas suivants :
– Quand tu essaies de déréférencer un pointeur nul.
Exemple :
MaClasse *ptr = nullptr;
ptr->fonctionMembre(); // ERREUR : Le pointeur est nul, la fonction ne peut être appelée.
– Quand tu essaies d'accéder à une case de mémoire qui n'est pas allouée à ton programme.
Exemple :
int *entier = new int(0);
*entier = 5; // pas de problème, la case de mémoire pointée est à toi.
delete entier;
*entier = 0; // ERREUR : la case de mémoire pointée n'est plus allouée à ton programme.
Dans tous les cas tu as un problème de pointeurs quelque part, et le seul moyen de trouver où est d'y aller à grands coups de debugger.
EDIT : J'avoue avoir répondu sans lire ton post.
Conseil : Pour stocker une position, prend un entier non signé, basiquement
unsigned int plutôt que juste
int.
Je te conseillerais même d'utiliser std::size_t qui est là exprès pour ça. Ça t'évitera des problèmes de positions négatives qui sont parfois source de problèmes.
Autre conseil : donne des noms explicites. J'ai pris une ligne au pif et ai trouvé
ble4.getAvb(). Comment suis-je supposé comprendre ce que cela signifie ?! Chage tes noms, là c'est incompréhensible, personne ne va vouloir t'aider avec un code pareil.
Pareil, dans ta classe inventaire, il y a : std::string invStr[];
Je suppose que invStr signifie "inventory string". La chaîne de caractères de l'inventaire. Cool, ça correspond à quoi ? À quoi sert cete attribut ? C'est son nom ? Si c'est son nom, appelle-le name, ne lui donne pas un nom à la noix. Et surtout pas un nom qui contient celui du type, n'appelle pas un string str, il y a std::string juste avant, je voir bien que c'est un string, pas la peine de le remettre dans le nom de l'instance.
D'ailleurs au début j'avais pas pigé que inv c'était pour inventory, je croyais que c'était inverse...comme quoi...