我有这个项目,我必须创建一个对象社会(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初始化有问题吗?
最佳答案
cArray是在bios_society :: creature_society中设置的
creature **cArray=new creature * [n];
在此方法之外,您无法访问此变量。如果您还有另一个(全局?)变量cArray,则该变量将不会更改,并且可能保持在0值,因此指向地址0x。
关于c++ - 无法访问地址0x的内存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35015063/