如何解决地址问题

时间:2019-08-08 23:33:10

标签: c++ pascals-triangle

我正在尝试解决Leetcode上的Pascal三角形问题。运行代码时出现此错误。

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;

    }
};

2 个答案:

答案 0 :(得分:2)

调用row.clear()时,这将擦除该行并将长度设置为0。结果,当您尝试访问row[0]row[i]等时,您正在访问内存你不应该碰。

答案 1 :(得分:2)

这是您的问题:

row[0]=1;
row[i]=1;

此时,row向量为空。因此,您正在空虚中写信。