多次使用new和delete

时间:2013-05-21 12:11:56

标签: c++ dynamic-memory-allocation delete-operator

我正在使用C ++模拟两个玩家之间的传统纸牌游戏:我定义了一个“卡”结构,以便

card sample;
cout << sample.numb << " of " << sample.suit << " ownded by player " << sample.own

读取,例如“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

脚本编译并运行,但经过几轮(正确执行)后,我得到“无效的下一个大小(快)”和一个段错误。 读到我发现这通常发生在你试图删除两次或类似的东西时。 我的脚本不会删除任何两次,但我怀疑经常使用new-delete-new这可能是我问题的原因。

思想?

编辑我使用std :: vector解决了我的问题,我建议对遇到同样问题的人做同样的事情;感谢所有回答的人。

和平

汤姆

2 个答案:

答案 0 :(得分:7)

你最好对g1,g2和tab使用数组删除: 例如:delete [] g1;

当然,使用std :: vector并且不直接处理内存管理会好得多。

答案 1 :(得分:1)

如果牌组有40张牌,那么没有牌手可以拥有超过40张牌,而牌桌不能超过40张牌。只需创建40张卡的阵列。动态分配在这里过度。