Leetcode刷题bug记录

tech2023-02-15  108

错误类型

1.runtime error: reference binding to null pointer of type 'std::vector

1.runtime error: reference binding to null pointer of type ‘std::vector<int, std::allocator >’ (stl_vector.h)

这是在完成Leetcode102题:Binary Tree Level Order Traversal时遇到的问题。翻译过来大致意思是引用绑定到了空的指针上。 源代码,采用递归思想:

class Solution{ public: vector<vector<int>> levelOrder(TreeNode* root){ vector<vector<int>> result; int num = 0; traversal(root, result, num); return result; } void traversal(TreeNode* tree, vector<vector<int>>& res, int level) { if(tree == NULL) return; res[level].push_back(tree->val); traversal(tree->left, res, level+1); traversal(tree->right, res, level+1); } };

问题原因: 1.未能对res实现扩容。使level增大后res[level]越界。

vector容器具备自动扩容的功能,但是res[level].push_back()只能对res[level]进行扩容,而不能对res进行扩容。当level超过容器容量时,会出现越界提示。

解决方案: 增添代码行:

if (level >= res.size()) res.push_back(vector<int>());

使容器在必要的时候进行扩容,避免下标越界。

2.在类中定义vector报错:expected parameter declarator

在完成力扣 剑指offer51时,在类中对临时数组初始化:

class Solution { public: vector<int> tmp(50000, 0);//该句报错 ... }

在类中需要优先声明,因此编译器对vector<int> tmp(50000, 0)语句,认为是声明成员函数tmp,返回值类型为vector<int>,函数存在两个参数,但是参数的声明错误。 在类中正确初始化方式:

//1 vector<int> tmp = vector<int>(50000, 0); //2 vector<int> tmp; tmp.reverse(50000); //3 vector<int> tmp{vector<int>(50000, 0)};
最新回复(0)