gpt4 book ai didi

c++ - new 和 delete 的多次使用

转载 作者:太空狗 更新时间:2023-10-29 23:52:15 25 4
gpt4 key购买 nike

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

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

阅读例如“黑桃 10 由玩家 2 拥有”。

我设置了一个 vector “deck”(大小为 40)来跟踪每张牌,并且我在游戏的每一步动态分配 vector “g1”、“g2”和“tab”,以便处理玩家 1 的手、玩家 2 的手和 table 上的牌,三个独立的物体(这对游戏本身来说是必要的)。

由于玩家不断将牌放在 table 上并获得/失去新牌,因此大小不断变化,所以每次我做这样的事情:

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 解决了我的问题,我建议对遇到同样问题的任何人都这样做;感谢所有回答的人。

和平,

汤姆

最佳答案

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

当然,最好不要使用 std::vector 而不是自己直接处理内存管理。

关于c++ - new 和 delete 的多次使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16669718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com