J'écris une fonction qui libère un tableau de pointeurs, mais lorsque j'appelle la fonction, j'obtiens l'erreur d'exécution 'double free ou corruption (fasttop)'. Le but de la fonction est d'effacer le tableau, qui obtient ses données d'un fichier d'entrée, si le fichier est déjà ouvert et la fonction fillArray est appelée à nouveau.Double gratuit ou corruption lors de l'effacement de la mémoire en C++
Voici la fonction qui est à l'origine des problèmes:
void freeArray(Country ** g_countryArray)
{
for (int i = 0; i < g_arrsz; ++i)
{
delete [] g_countryArray;
}
}
Si on l'appelle partout dans le programme, pour autant que je peux dire, il provoque un plantage du programme. J'ai lancé le débogueur mais je n'ai pas assez d'expérience pour comprendre la sortie. Je peux poster des informations à partir de ça si ça peut aider.
Pourquoi supprimez-vous plusieurs fois le même pointeur? Cela n'a aucun sens. Un seul suffit; la deuxième fois présente un comportement indéfini. –
Votre problème est 'g_arrsz' est'> 1'. Cela, et votre fonction fait certainement la mauvaise chose, car il supprime un tableau de pointeurs et non ce que les pointeurs pointent vers. En fait, votre problème semble être que vous ne connaissez pas C++ ou C et que vous utilisez des pointeurs sur des pointeurs. Non attends! Votre problème immédiat est le manque de [mcve]. Fondamentalement, vous avez 99 problèmes, et cette question ne va pas les résoudre tous. – Yakk
Merci pour la direction d'élaborer une meilleure réponse. Oui, j'apprends le C++, donc NON je ne suis pas un expert. Pourquoi impliquez-vous que les pointeurs vers les pointeurs ne sont pas bons? Ceci est pour une affectation de classe, et l'utilisation d'un pointeur sur un pointeur fait partie de l'exigence ... –