首页 > 解决方案 > 尝试释放 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 文件中。

谢谢你。

在此处输入图像描述

标签: c++

解决方案


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.


推荐阅读