J'ai créé une classe qui prend un tas d'images et les superpose sur un BMP. Pour une raison quelconque lors de l'exécution du code, je reçois un segfault et je l'ai suivi jusqu'à cette méthode. Essentiellement, l'instruction if vérifie s'il existe un index valide dans le tableau d'images pour placer cette nouvelle image. Si elle est valide, elle supprime tout ce qui existait auparavant et définit cet index sur cette nouvelle image. La classe s'appelle Scene et comprend un tableau de pointeurs d'image. Donc ce que je fais remplace l'image vers laquelle pointe l'un de ces pointeurs. D'une certaine manière, cela ne fonctionne pas. Si le pointeur est NULL, la commande delete ne devrait causer aucun problème, donc je ne vois pas ce qui pourrait mal se passer. Ce code agit sur une scène qui a un tableau de pointeurs d'image de longueur 5.Erreur de bus lors de l'appel Supprimer (C++)
void Scene::addpicture(const char* FileName, int index, int x, int y)
{
if (index<0 || index>maxnum-1)
{
cout << "index out of bounds" << endl;
}
else
{
Image* extra;
extra = new Image;
extra->ReadFromFile(FileName);
delete imagelist[index];
imagelist[index] = extra;
imagelist[index]->xcoord=x;
imagelist[index]->ycoord=y;
}
}
Quelqu'un peut-il aider. Cela serait très appréciable.
Merci
J'ai édité pour inclure le constructeur:
Scene::Scene(int max)
{
Image** imagelist = new Image*[max];
for(int i=0; i<max; i++)
{imagelist[i] = NULL;}
maxnum = max;
}
J'ai également commenté la principale méthode pour que les seules fonctions étant appelées sont
Scene* set = new Scene(5);
set->addpicture("in_01.bmp", 0, 0, 0);
pourrait vous s'il vous plaît fixer le retrait de code? –
Quelle ligne plante? –
Vous n'avez pas besoin de vérifier null avant la suppression. Aussi, pourquoi ne pas combiner 'Image * extra' avec la ligne suivante? – GManNickG