我有以下代码,但不确定为什么在遇到 Myclass 的析构函数时会收到堆损坏检测错误。我相信我正在正确地释放内存??
#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";
}
编辑:(固定代码)
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);
}
在 main() 中,我还添加了
delete a;
在调用 return 1 之前;