Push_back指针向量的方法会导致崩溃C++
Push_back method of vector of pointers causes crash C++
我正在尝试向C++向量添加指针。 因此:
Puzzle * puzzleStart = new Puzzle();
std::vector<Puzzle*> OPEN;
OPEN.push_back(puzzleStart);
第一次按下指针时,没有问题。 第二次,它会导致崩溃。 我猜问题是矢量的大小,但我不明白为什么。还有什么吗?
更新:你是对的,问题出在其他地方,我刚刚意识到它是在我释放指针向量时发生的。我认为,如果向量包含指针的重复请求,还有另一个问题。
if (OPEN.size()!=0){
for (int i = 0; i < OPEN.size(); ++i) {
delete OPEN[i]; // Calls ~object and deallocates *tmp[i]
}
OPEN.clear();
}
如何确保它不会尝试擦除所有已删除的指针?
你是对的,问题出在其他地方,我刚刚意识到它发生在我释放指针向量时。 我认为,如果向量包含指针的重复请求,还有另一个问题。
if (OPEN.size()!=0){
for (int i = 0; i < OPEN.size(); ++i) {
delete OPEN[i]; // Calls ~object and deallocates *tmp[i]
}
OPEN.clear();
}
如何确保它不会尝试擦除所有已删除的指针?
如果问题是指针重复,则应考虑不允许重复的容器,例如集合。 例如:
std::set<Puzzle*> s;
Puzzle *puzz = new Puzzle();
auto insert_result = s.insert(puzz);
if(!insert_result.second)
{
std::cout << ""puzz" was a duplication. No insertion made.n";
}
// More items inserted into s, and used, etc.
for(auto p : s)
delete p;
s.clear();
删除指针时,请将其设置为 nullptr。 删除空指针不会导致崩溃。
相关文章:
- 当回溯以零开始时,如何调试崩溃
- 内联映射初始化的动态atexit析构函数崩溃
- 执行函数时导致崩溃的变量
- 程序崩溃并显示"std::out_of_range"错误
- CoInitialize()在单独的线程上崩溃而不返回
- 使用调试/崩溃报告将应用程序部署到客户端
- 为什么所有C++编译器都会崩溃或挂起此代码
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 为什么我的多线程作业队列崩溃
- ExtractIconEx:可以工作,但偶尔会崩溃
- 为什么引用传递会导致此崩溃(C++)
- 试图创建流或fopen时程序崩溃
- 类对象数组的问题会导致崩溃
- 排序时无法执行交换操作.我做的时候它会崩溃.为什么
- 为什么要增加导致崩溃的指针
- 在虚幻引擎中删除NXOpen对象时崩溃
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- Visual Studio在尝试读取resource.txt文件时崩溃
- 将方法转换为调用该方法的成员函子对象会导致崩溃