La corruption de segment détecté après le bloc normal

J'ai le code suivant et ne suis pas sûr pourquoi suis-je la corruption de segment détecté l'erreur quand il frappe le destructeur de Myclass. Je crois que je suis la désallocation de la mémoire correctement ??

#include <iostream>
#include <vector>
using namespace std;

class MyClass{
private:
    char* mp_str;
public:
    MyClass():mp_str(NULL){}
    ~MyClass(){
        delete [] mp_str;
    }

    void setString(const char* str);
    void printString();
};

int main(){
    MyClass* a = new MyClass();
    std::vector<MyClass> myVector;

    myVector.push_back(*a);

    a->setString("Hello World");
    myVector[0].setString("Goodbye world");

    a->printString();
    myVector[0].printString();

    return 1;
}

void MyClass::setString(const char* const str){
    if(!str)
        return;

    size_t len = strlen(str);

    if(!this->mp_str){
        this->mp_str = new char[len];
        memset(mp_str, 0, len+1);
    }
    strncpy(mp_str, str, len);
}

void MyClass::printString(){
    if(this->mp_str)
        cout << mp_str;
    else
        cout << "No string found";
}

MODIFIER: (code Fixe)

void MyClass::setString(const char* const str){
    if(!str)
        return;

    size_t len = strlen(str);

    if(!this->mp_str){
        this->mp_str = new char[len+1];
        memset(mp_str, 0, len+1);
    }
    strncpy(mp_str, str, len);
}

dans main(), j'ai également ajouté

delete a;

avant d'appeler return 1;

Besoin de la la Règle de Trois.
vous avez également la fuite de l'objet dans a
d'accord. fixe.
Oui, je comprends qu'une copie de a est poussé sur le vecteur et j'ai besoin d'une copie en profondeur ici. Je dois suivre la Règle de Trois. Toutefois, le code ne doit pas lancer de telles erreurs. Rafael réponse m'a aidé à me signaler l'erreur!
Si j'étais certain que c'était la cause de la panne, je l'aurais posté une réponse. Comme un commentaire, il indique une suggestion que vous devez suivre (car il va entraîner les mêmes casse-tête plus tard si pas fixe). Ce qui concerne

OriginalL'auteur brainydexter | 2012-07-26