Erreur : new-delete-type-mismatch
Erreur d’assainissement de l’adresse : taille de désallocation différente de la taille d’allocation
Dans cet exemple, seul ~Base
, et non ~Derived
, est appelé. Le compilateur génère un appel car ~Base()
le Base
destructeur n’est pas virtual
. Lorsque nous appelons delete b
, le destructeur de l’objet est lié à la définition par défaut. Le code supprime une classe de base vide (ou 1 octet sur Windows). Une mot clé manquante virtual
sur la déclaration de destructeur est une erreur C++ courante lors de l’utilisation de l’héritage.
Exemple : destructeur virtuel
// example1.cpp
// new-delete-type-mismatch error
#include <memory>
#include <vector>
struct T {
T() : v(100) {}
std::vector<int> v;
};
struct Base {};
struct Derived : public Base {
T t;
};
int main() {
Base *b = new Derived;
delete b; // Boom!
std::unique_ptr<Base> b1 = std::make_unique<Derived>();
return 0;
}
Les classes de base polymorphes doivent déclarer virtual
des destructeurs. Si une classe a des fonctions virtuelles, elle doit avoir un destructeur virtuel.
Pour corriger l’exemple, ajoutez :
struct Base {
virtual ~Base() = default;
}
Pour générer et tester cet exemple, exécutez ces commandes dans une invite de commandes développeur Visual Studio 2019 version 16.9 ou ultérieure :
cl example1.cpp /fsanitize=address /Zi
devenv /debugexe example1.exe
Erreur résultante
Voir aussi
Vue d’ensemble de AddressSanitizer
Résoudre les problèmes connus liés à AddressSanitizer
Référence de build et de langage AddressSanitizer
Informations de référence sur le runtime AddressSanitizer
Octets d’ombre AddressSanitizer
Test cloud ou distribué AddressSanitizer
Intégration du débogueur AddressSanitizer
Exemples d’erreur AddressSanitizer
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour