C++ 调试断言失败_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)

C++ Debug Assertion Failed _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)

本文关键字:gt pHead- nBlockUse IS 断言 调试 失败 BLOCK C++ TYPE VALID      更新时间:2023-10-16

我在这里看过类似的问题,但仍然无法意识到,我做错了什么。请帮助。

我需要制作模板的字符串类与有限的大小(如在Pascal)代码如下:http://pastebin.com/syZf3yM8

错误如下:https://i.stack.imgur.com/4Jo8i.png

在my_string析构函数中,您的代码是:

~my_string () {
                delete [] this->text;
        }

不应该这样做,因为text是数组,而不是指针。当你调用*S3 = *S1 + *S2时,my_string <max_size, T> operator+(const my_string& s)也会被调用。在这个运算中,my_string <max_size, T> res是一个局部变量,位于堆栈中。此功能结束后,res将被自动删除。所以给S3分配资源是错误的。你可以这样修改:

~my_string () {
    }
my_string <max_size, T> operator+(const my_string& s) {
        my_string <max_size, T> res;
        int count = 0;
        while (this->get_char(count) != '') {
            res.set_char(this->get_char(count), count);
            count++;
        }
        for(int i = 0; count < max_size; i++){
            if (s.get_char(i) == '') { res.set_char('', count); break; }
            res.set_char(s.get_char(i), count);
            count++;
        }
        return res;
    }

my_string& operator=(const my_string& s){
        int size=s.get_length();
        for (int i = 0; i < size; i++){
            this->set_char(s.get_char(i),i);
        }
        return *this;
    }

最后在主功能中:

delete S1;
delete S2;
delete S3;