C++指针生存期问题(续)

intDistribution(Client**oneclient,inttimes){(*oneclient)->patnumber+=times;inti=(*one... int Distribution(Client **oneclient,int times){
(*oneclient)->patnumber+=times;
int i=(*oneclient)->patnumber;
while(times!=0){
srand((unsigned)time(NULL));
int test = rand()%2+1;//随机分配

if(test==1){
string str="力量型";

(*oneclient)->hispat[i]=new PowerPat(str,1,1,0,20,20,20,20);
cout<<(*oneclient)->hispat[i]->name<<endl;
}
if(test==2){
string str="高生命值型";
(*oneclient)->hispat[i]=new HighLifePat(str,1,1,0,20,20,20,20);
cout<<(*oneclient)->hispat[i]->name<<endl;
}
cout<<"test="<<test<<endl;
cout<<(*oneclient)->hispat[i]->name<<endl;//这里还没有问题
i++; times--;
}
cout<<(*oneclient)->hispat[i]->name<<endl;//在这里出现了问题
return 0;
}
int main(){
Client *oneclient=new Client;

oneclient->Name="weiling";
oneclient->patnumber=0;
Distribution(&oneclient,3);//调用函数
cout<<"第1个宠物的名字为"<<endl;
cout<<oneclient->hispat[0]->name<<endl;//这里也有问题
return 0;

}
展开
 我来答
金色潜鸟
2014-05-10 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5987万
展开全部
while(1){
...
(*oneclient)->hispat[i]=new ... // 这里对成员 hispat[i] 分配单元
...
i++; // 这里 i 增加了 1
};
出了循环,i 保持一个比你最后分配过的i 大1的i 。
所以,你 输出一个 尚未 分配单元,也未赋值的 量
cout<<(*oneclient)->hispat[i]->。。。。。就错了。
如果 是 cout<<(*oneclient)->hispat[i-1]->。。。。。就可以。
========
主函数里 cout<<oneclient->hispat[0]->name<<endl;//这里也有问题
是因为 在 Distribution 函数 里 对hispat[0] 作的动态分配,出了 Distribution 函数 通常就无效了。
追问
那怎么样才能让它有效呢?
追答
在主函数里动态分配,或声明为定态的。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式