gpt4 book ai didi

c++在分配变量时未处理的异常访问冲突

转载 作者:行者123 更新时间:2023-11-30 02:36:32 25 4
gpt4 key购买 nike

std::vector <Item*> itemSlot;
itemSlot.resize(1);

Item testItem;
testItem.item_id = 99;

*itemSlot[0] = testItem; // ERROR

std::cout << "ID: " << itemSlot[0]->item_id << std::endl;

为什么会出现错误?

我知道我可以用:

itemSlot[0] = &testItem;

但我不想这样做,因为如果我在函数中创建项目并在函数中分配它,如果我在函数外调用 itemSlot[0]->item_id,它会给我随机数,因为变量项将被销毁,指针将指向任何内容。

最佳答案

意义

*itemSlot[0] = testItem; // Copy-assign testItem into the item at index zero

完全不同于

itemSlot[0] = &testItem; // Place the address of testItem at index zero

如果您在索引零处有一个 Item,那么第一个构造将起作用,但您没有:对 itemSlot.resize(1) 的调用将 nullptr 到索引零,因此取消引用它会导致未定义的行为。

有几种解决方案:

  • 使您的 vector 成为Item而不是Item*的 vector ,或者
  • 使用 Item *testItem = new Item() 并在最后调用 delete,或者
  • 使用带有智能指针 vector 的 new Item() 来避免手动删除。

关于c++在分配变量时未处理的异常访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32570177/

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