#include <iostream>
using namespace std;
class Rab {
char* pt = NULL;
public:
Rab(const char* t) {
//构造函数
char* back = new char[strlen(t) + 1];
strcpy_s(back, strlen(t) + 1, t);
pt = back;
back = NULL;
}
~Rab() {
//析构函数 + 空置
delete[] pt;
pt = NULL;
}
bool Error1(Rab t) {
//判断字符串是否相等
return strcmp(this->pt, t.pt) == 0;
}
};
int main() {
Rab ta{ "SEU" };
Rab te{ "THU" };
ta.Error1(te);
//system("pause");
return 0;
}
上面这个程序里,error1()在退栈时释放了实参te的成员pt所指向的内存,并将其设置成了NULL。当main()函数退栈时,te的成员pt所指向的内存被再次释放,此时程序报错。
我的问题是,对空指针使用delete或delete[]不应该是安全的吗。为什么会报错呢。
(此处未用复制构造函数是有意而为之。)
希望大佬解惑!