C ++ Debug Assertion失败_BLOCK_TYPE_IS_VALID(pHead-> nBlockUse)

时间:2014-06-24 08:11:33

标签: c++ c debugging assertion

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

我需要为有限大小的字符串类创建模板(如在Pascal中) 这是代码:http://pastebin.com/syZf3yM8

这是错误:http://i.stack.imgur.com/4Jo8i.png

1 个答案:

答案 0 :(得分:0)

在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。因此,将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) != '\0') {
            res.set_char(this->get_char(count), count);
            count++;
        }

        for(int i = 0; count < max_size; i++){
            if (s.get_char(i) == '\0') { res.set_char('\0', 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;