我使用构造函数得到错误堆错误(使用内存dinamic char * t = new char [10] t =" test123456&#34 ;;)并在distructor中删除[] t;错误

时间:2016-03-09 20:39:27

标签: c++ visual-studio

错误堆内存,内存损坏,#181只是不理解它。一段时间尝试使用复制ctor和它相同的错误。你能解释一下吗

Test::Test() {
    desc = new char[4];`
    desc = "Try";
} 

Test::~Test() {delete [] desc; }

1 个答案:

答案 0 :(得分:3)

它失败了,因为你不了解C ++的基础知识。

desc = new char[4]; desc = "Try";

这行代码首先为4个字符分配内存,返回指向已分配内存的指针并将其存储在desc中。但是,下一刻你完全失去了这个指针,现在将“Try”(字符串文字)分配给desc。现在您的desc指向“尝试”。

下面

Test::~Test() {delete [] desc; }

删除指向“尝试”的指针 - 就好像你会delete "Try"一样。但是你不能删除一个字符串文字,你没有创建它。

因此崩溃。