大家能帮忙看下这段程序为什么崩溃吗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]时,就会数组下标访问越界,程序崩溃
