如何解决地址问题
How to fix an address issue
我正在尝试解决 Leetcode 上的帕斯卡三角问题。当我 运行 代码时出现此错误。
AddressSanitizer: heap-buffer-overflow on address 0x602000000014 at pc 0x000000407875 bp 0x7ffe13bd9300 WRITE of size 4 at 0x602000000014 thread T0.
我该如何解决?
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> tri(numRows);
vector<int> row;
row.push_back(1);
tri.push_back(row);
row.clear();
for (int i = 1; i < numRows; i++) {
row[0]=1;
row[i]=1;
for (int j = 1; j < i; j++) {
row[j] = tri[i-1][j] + tri[i-1][j-1];
}
tri[i] = row;
row.clear();
}
return tri;
}
};
当您调用 row.clear()
时,会擦除该行并将长度设置为 0。因此,当您尝试访问 row[0]
、row[i]
等时,您访问您不应该接触的内存。
这是你的问题:
row[0]=1;
row[i]=1;
此时,row
向量为空。所以你是在凭空写作。
我正在尝试解决 Leetcode 上的帕斯卡三角问题。当我 运行 代码时出现此错误。
AddressSanitizer: heap-buffer-overflow on address 0x602000000014 at pc 0x000000407875 bp 0x7ffe13bd9300 WRITE of size 4 at 0x602000000014 thread T0.
我该如何解决?
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> tri(numRows);
vector<int> row;
row.push_back(1);
tri.push_back(row);
row.clear();
for (int i = 1; i < numRows; i++) {
row[0]=1;
row[i]=1;
for (int j = 1; j < i; j++) {
row[j] = tri[i-1][j] + tri[i-1][j-1];
}
tri[i] = row;
row.clear();
}
return tri;
}
};
当您调用 row.clear()
时,会擦除该行并将长度设置为 0。因此,当您尝试访问 row[0]
、row[i]
等时,您访问您不应该接触的内存。
这是你的问题:
row[0]=1;
row[i]=1;
此时,row
向量为空。所以你是在凭空写作。