c++ - 第 924 行:字符 9:运行时错误:引用绑定到“int”类型的空指针 (stl_vector.h)
问题描述
在 leetcode 上运行以下代码时出现运行时错误。当我删除用户定义的比较器功能时,它工作正常。但是使用用户定义的比较器功能,它会给出运行时错误,如下所示:
第 924 行:字符 9:运行时错误:引用绑定到类型为“int”的空指针 (stl_vector.h) 摘要:UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/../lib/gcc/x86_64-linux-gnu/8 /../../../../include/c++/8/bits/stl_vector.h:933:9
class Solution {
private:
static bool comp (vector<int> p1, vector<int> p2) {
if(p1[0] < p2[0] || p1[1] < p2[1])
return true;
else
return false;
}
public:
int maxEnvelopes(vector<vector<int>>& envelopes) {
if (envelopes.empty())
return 0;
sort(envelopes.begin(), envelopes.end(), comp);
vector<int> dp(envelopes.size(), 1);
int res = 0;
for (int i = 0; i < envelopes.size(); i++) {
for (int j = i-1; j >=0; j--) {
if (envelopes[j][0] < envelopes[i][0] && envelopes[j][1] < envelopes[i][1] && dp[j] + 1 > dp[i])
dp[i] = 1 + dp[j];
}
res = max(res, dp[i]);
}
return res;
}
};
解决方案
这是一个经典的错误。考虑这对向量
p1 = {1, 4} 和 p2 = {2, 3}
现在 comp(p1, p2) 为真,因为 1 < 2 但 comp(p2, p1) 也为真,因为 3 < 4。那么当 p1 小于 p2且p2 小于 p1 时排序应该如何工作?
您需要编写一个有意义的比较函数。也许像这样
static bool comp (vector<int> p1, vector<int> p2) {
return p1[0] < p2[0] || (p1[0] == p2[0] && p1[1] < p2[1]);
}
推荐阅读
- reactjs - 创建一个 React 组件只是为了保存道具是一种好习惯吗?
- python - 蟒蛇,硒。成功初始化 webdriver 但无法打开网页,因为“没有名为 get 的属性”
- python - 在 Windows 上的 Tor Chrome 中加载 Selenium 用户配置文件
- python - 使用 Pyglet 进行多处理会打开一个新窗口
- web-scraping - casperjs 无法访问甚至 wget 可以访问的某些网站
- rust - 在 Rust 结果的 Iter 上调用 map
- python - 如何使用python在Firestore中查询包含对象数组的文档
- python - 当还有数字类型的列时,Pandas groupby sum 不包括 timedelta 类型的列
- python - 条形图和标签上的值
- c++ - 如果我采用 A = 10^9 和 B=10^9 ,则以下代码给出负输出。为什么?它为我提供了小整数的正确输出