大家能帮忙看下这段程序为什么崩溃吗,该怎么解决

大家能帮忙看下这段程序为什么崩溃吗C/C++ code#include iostream#include stringclass Screen{public

大家能帮忙看下这段程序为什么崩溃吗

C/C++ code
#include <iostream>#include <string>class Screen{public:    typedef std::string::size_type index;    Screen& move(index r,index c);    Screen& set(char c);    Screen& display(std::ostream &os)    {        do_display(os);        return *this;    }private:    void do_display(std::ostream &os) const    {        os<<contents;    }    std::string contents;    index cursor;    index height,width;};Screen& Screen::move(index r,index c){    index row=r*width;    cursor=row+c;    return *this;}Screen& Screen::set(char c){    contents[cursor]=c;    return *this;}int main(){    Screen myScreen;    myScreen.move(4,0).set('#').display(std::cout);    return 0;}


[解决办法]
这里contents[cursor]=c;
contents缺省构造为“”
[解决办法]
width没有被初始化过,因此cursor也是个随机值。contents[cursor]会因此而越界。
[解决办法]
就是没有初始化
[解决办法]
没有初始化
[解决办法]
探讨

没有初始化

[解决办法]
contents没有分配空间。这样就好了:
C/C++ code
Screen& Screen::set(char c){    //contents[cursor]=c;    contents.push_back(c);    return *this;}
[解决办法]
contents[cursor]=c;这句导致数组下标越界了,或者说没有添加字符串结束标准'\0';
[解决办法]
contents[cursor]=c;
将这一句修改为:contents=c;就可以了,

因为contents一开始是空的,系统只为contents分配了一个字符的空间,用来存储'\0',没有为其分配更多的内存,当你使用contents[cursor]时,就会数组下标访问越界,程序崩溃