在这段代码中我试图将一些对象添加到basees并且它编译但会在addbase函数内部崩溃,有人可以告诉我为什么吗?(我知道分配内存而不释放它并不好但我认为它不会影响我的代码的行为在这里)
class base
{
string a;
public:
void setstring(string);
string showstring(){ return a; }
};
void base::setstring(string ss)
{
a=ss;
}
class pointerclass
{
public:
base *basees;
pointerclass() {base *basees=new base[5]; }
void addbase(base,int);
};
void pointerclass::addbase(base ab,int i)
{
//will crash here
basees[i] = ab;
}
int main()
{
base a,b,c;
a.setstring("something");
pointerclass aaa;
aaa.addbase(a,0);
cout<<aaa.basees[0].showstring();
return 0;
}
答案 0 :(得分:1)
在pointerclass
的构造函数中,您执行以下操作:
base *basees=new base[5];
这在构造函数中声明了一个名为basees
的新局部变量,它为它分配内存,然后控制从构造函数返回,忘记了本地变量曾经存在过。 (内存泄漏。)
因此,名为pointerclass
的{{1}}的成员字段永远不会被初始化。
因此,当您第一次尝试将某些内容分配给basees
时,您的程序就会爆炸。
您在构造函数中的意图如下:
pointerclass.basees
答案 1 :(得分:0)
在pointerclass(){base *basees=new base[5];}
中,您不是分配成员basees
,而是分配在括号内的变量basees
。
答案 2 :(得分:0)
你应该为成员指针basess