c++代码中的Bug可能是指针没有指向任何东西

bug in c++ code maybe pointer not pointing to anything

本文关键字:任何东 指针 代码 Bug c++      更新时间:2023-10-16
#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。