weixin_44398636
Xnew!
2020-03-13 23:25

【基础语法】【疑问】对空指针使用delete不应该是安全的吗

  • c++
  • c语言
#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[]不应该是安全的吗。为什么会报错呢。
(此处未用复制构造函数是有意而为之。)
希望大佬解惑!

  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

1条回答