Tom*_*Tom 2 c++ dynamic-memory-allocation delete-operator
我正在使用C++模拟两个玩家之间的传统纸牌游戏:我定义了一个"卡"结构
card sample;
cout << sample.numb << " of " << sample.suit << " ownded by player " << sample.own
Run Code Online (Sandbox Code Playgroud)
读取例如"10个黑桃由玩家2拥有".
我设置了一个矢量"牌组"(大小40)跟踪每张牌,并且我在游戏的每一步动态分配矢量"g1""g2"和"tab",以便处理玩家1的牌,玩家2的牌和牌桌上有三个分开的物体(这对于游戏本身来说是必要的).
由于玩家不断将卡片放在桌面上并获得/丢失新卡片,因此大小不断变化,所以每次我做这样的事情:
delete g1;
delete g2;
delete tab;
n1=count (1,deck); // this counts how many cards in "deck" have .own field==1
n2=count (2,deck); // this counts how many cards in "deck" have .own field==2
nt=count (0,deck); // cards having .own field == 0 are on the table
g1 = new card [n1];
g2 = new card [n2];
tab = new card [nt];
k=0; // using this to move through the vectors I just re-allocated
for (i=0;i<40;i++) {
if(deck[i].own==1) {
g1[k]=deck[i];
k++;
}
}
// then I fill "g2" and "tab" pretty much in the same way
Run Code Online (Sandbox Code Playgroud)
脚本编译并运行,但经过几轮(正确执行)后,我得到"无效的下一个大小(快)"和一个段错误.读到我发现这通常发生在你试图删除两次或类似的东西时.我的脚本没有删除任何东西两次,但我怀疑这种频繁使用new-delete-new的方法已被弃用,可能是我的问题的原因.
思考?
编辑我用std :: vector解决了我的问题,我建议对遇到同样问题的人做同样的事情; 感谢所有回答的人.
和平,
汤姆