我有这个项目,我必须创建一个对象社区(creatures
),这是一个单独的对象。我试图通过初始化creature
构造函数中对象creature_society
的指针数组来做到这一点(好的和坏的生物是继承抽象的类生物的类)
creature_society::creature_society(int n, int L, int good_thrsh, int bad_thrsh)
{
int a;
creature **cArray = new creature * [n];
gthrsh = good_thrsh;
bthrsh = bad_thrsh;
for(i = 0; i < n; i++)
{
a = rand() % 2 ;
if(a == 1)
cArray[i] = new good_creature(L, i);
else
cArray[i] = new bad_creature(L, i);
cout<< "\nhp is "<< cArray[i]->gethp() << "\n" << endl;
}
}
一切正常,创造社会和生物被创造但是当我尝试通过生物类功能改变cArray[i]
的值时,例如
void creature::bless()
{
if(!is_a_zombie())
hp++;
}
我遇到了分段错误,我收到了消息
cannot access memory at address 0x..
所以我的问题是,为什么我会得到它? cArray初始化有问题吗?
答案 0 :(得分:1)
cArray在creature_society :: creature_society
期间设置creature **cArray=new creature * [n];
在此方法之外,您无法访问此变量。如果你有另一个(全局?)变量cArray,这将不会被更改,并且可能保持值为0,因此指向地址0x。