c++ - 尝试释放 std::forward_list 指针的动态数组(C++)
问题描述
我正在尝试取消分配一个动态分配的指针数组,该数组指向使用以下内容创建的转发列表:
deck = new forward_list<T>*[numDecks];
for (int i = 0; i < numDecks; i++) {
deck[i] = new forward_list<T>;
}
numberOfDecks = numDecks;
我试图迭代和删除这样的牌组:
for (int i = 0; i < numDecks; i++) {
delete[] deck[i];
numberofDecks--;
}
delete[] deck;
但是我遇到了读取访问冲突。事实上,即使我只是写:
delete[] deck[0];
我仍然遇到读取访问冲突。我一直在玩这个很长一段时间,但一直无法让它工作。我附上了错误的屏幕截图(它出现在 forward_list 文件中。
谢谢你。
解决方案
Your code has undefined behavior, as you are creating the std::forward_list
objects using new
but then destroying them with delete[]
instead of delete
. You need to change this:
delete[] deck[i];
To this:
delete deck[i];
new
/delete
are for single objects, and new[]
/delete[]
are for arrays. They must be matched up properly.
A better option is to use std::vector<std::forward_list>
instead of std::forward_list*[]
, and let the vector
handle the memory for you.
推荐阅读
- swift - 在 CGContext 中重新创建 UIImageView 的 CGAffineTransform
- azure - Azure Functions TimerTrigger 在运行数小时后重新启动
- c - C中的文件输入
- powerbi - 在选择单个切片器之前不显示卡片值
- javascript - onBeforeUnload 事件以防止出现“您确定要离开此页面”消息
- c# - Visual Studio 2017 快速操作删除内部
- javascript - 如何缩小以使我的谷歌地图适合我最近的标记?
- haskell - “宽松的幺半群函子”中的“宽松”是什么意思?
- java - 接受输入时扫描程序抛出 java.util.NoSuchElementException
- python - 加载/保存后合并的单元格被破坏