c++代码中的Bug可能是指针没有指向任何东西
bug in c++ code maybe pointer not pointing to anything
#include "BST.hpp"
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
/* Create an STL vector of some ints */
vector<int> v;
v.push_back(3);
v.push_back(4);
v.push_back(1);
v.push_back(100);
v.push_back(-33);
/* Create an instance of BST holding int */
BST<int> b;
/* Insert a few data items. */
vector<int>::iterator vit = v.begin();
vector<int>::iterator ven = v.end();
for(; vit != ven; ++vit) {
// all these inserts are unique, so should return a std::pair
// with second part true
std::pair<BST<int>::iterator,bool> pr = b.insert(*vit);
if(! pr.second ) {
cout << "Incorrect bool return value when inserting " << *vit << endl;
return -1;
}
if(*(pr.first) != *vit) {
cout << "Incorrect iterator return value when inserting " << *vit << endl;
return -1;
}
}
程序抱怨这行代码
if(*(pr.first) != *vit)
和关于这行代码
BSTIterator(BSTNode<Data>* curr) {
this->curr = curr;
}
,它在另一个头文件中。我已经被困在这个bug上2天了,我仍然不知道如何解决它。顺便说一句,这个错误是一个运行时错误,因为它没有给出标准的编译错误输出。我的猜测是指针没有指向任何东西,但我可能又错了。我能得到一些线索,从哪里开始寻找漏洞或如何解决它?
是的,取消引用NULL指针通常会导致段错误或核心转储。
通常建议在取消NULL引用之前进行检查。除非你正在创建一个类(就像这里),你希望用户做那个检查,就像std::vector.
如果你的insert函数返回NULL迭代器,那么这将导致你取消对NULL迭代器的引用你可以用
来解决if(!pr.first || *(pr.first) != *vit)
如果pr.first为NULL,那么它将进入If语句并显示错误。
因为NULL = = 0 = = False。
相关文章:
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- C++ - 声明指向返回任何类型并获取任意数量参数的函数的指针
- VkSurfaceKHR 指针的值在函数调用后更改,无需任何显式赋值
- 检查模板中 nullptr 的函数指针,了解任何类型的可调用对象
- f 是指向函数的指针,该函数采用 int,并返回指向不带任何内容并返回双精度的函数的指针
- 无法"this"指针传递到另一个类并在 CPP 中调用该类的任何方法
- 是否允许调用方对我的 Builder 类使用任何指针类型(包括智能指针)?
- Antlr cpp 运行时 任何错误的指针转换?
- C++如何使虚拟函数返回任何类型的指针
- 指针可以用于访问内存中的任何任意区域吗?
- 带有自定义类的共享指针语法背后的任何原因,如下所示
- 如何获取指向未知重载函数的任何重载的指针?
- 在任何地方使用共享指针有哪些陷阱?
- 在类中始终使用此指针是否有任何性能成本
- any_cast std::任何指向特定指针类型的指针
- 任何指针类型的模板专业化
- C++/(Qt) 指向具有特定方法的任何对象的指针
- 函数和指针帮助:程序生成,但崩溃,没有任何特定错误
- 如何创建泛型函数,该函数将返回c++中任何级别指针的值
- 如何断言特定类的布局中没有任何vtbl指针