OnlyStronger 2023-10-28 15:04 采纳率: 53.8%
浏览 24

大家好,我用C++实现杨辉三角时报错,请帮我看看

大家好,这个代码出现了这个错误,请问是为什么呢?是力扣的119题


class Solution {
public:
    vector<int> getRow(int rowIndex) {
        vector<vector<int>> Ma;

        Ma.push_back({1});
        Ma.push_back({1, 1});

        if(rowIndex == 0)
        {
            return Ma[0];
        }
        if(rowIndex == 1)
        {
            return Ma[1];
        }
        
        for(int i = 2; i <= rowIndex; i++)
            {
                vector<int> temp;
                for(int j = 0; j <= i; j++)
                {
                    temp[j] = Ma[i-1][j-1] + Ma[i-1][j];
                }
                Ma.push_back(temp);
            }
        return Ma[rowIndex];
             
    }
};

错误:Line 1037: Char 34: runtime error: addition of unsigned offset to 0x602000000030 overflowed to 0x60200000002c (stl_vector.h)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/stl_vector.h:1046:34

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-28 16:28
    关注

    【以下回答由 GPT 生成】

    由于题目中未提供实际错误的样本输入和期望输出,所以我将根据提供的代码和错误信息,根据常见的错误情况进行分析。

    通过分析代码和错误信息,可以看出问题出现在以下代码段中:

    for(int j = 0; j <= i; j++) {
        temp.push_back(Ma[i-1][j-1] + Ma[i-1][j]);
    }
    

    错误信息中提到了错误发生在stl_vector.h文件的第1046行,而对应代码中的这一行表示进行向temp向量中添加元素的操作。因此,可以初步判断问题出在数组越界上。

    在杨辉三角的计算过程中,我们需要根据前一行的数据计算下一行的数据,并且每一行的数据个数等于行数加一。但是在上述代码中,内层循环的起始值是0,这意味着我们会访问到杨辉三角中不存在的元素。

    例如,当rowIndex等于2时,Ma中的数据如下:

    Ma = {{1}, {1, 1}}
    

    在计算第三行时,内层循环的范围是从0到3。当j等于0时,Ma[i-1][j-1]会尝试访问到Ma[1][-1],这是一个不存在的索引,因此会导致越界错误。

    为了解决这个问题,我们需要将内层循环的起始值改为1,这样就能访问到正确的元素。

    以下是修改后的代码:

    class Solution {
    public:
        vector<int> getRow(int rowIndex) {
            vector<vector<int>> Ma;
    
            Ma.push_back({1});
            Ma.push_back({1, 1});
    
            if(rowIndex == 0) {
                return Ma[0];
            }
            if(rowIndex == 1) {
                return Ma[1];
            }
    
            for(int i = 2; i <= rowIndex; i++) {
                vector<int> temp;
                for(int j = 1; j <= i; j++) {
                    temp.push_back(Ma[i-1][j-1] + Ma[i-1][j]);
                }
                Ma.push_back(temp);
            }
            return Ma[rowIndex];
        }
    };
    

    希望这个解决方案可以帮助到你。如果你还有任何问题,请随时提问。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 修改了问题 10月28日
  • 创建了问题 10月28日

悬赏问题

  • ¥15 jetson nano
  • ¥15 :app:debugCompileClasspath'.
  • ¥15 windows c++内嵌qt出现数据转换问题。
  • ¥20 公众号如何实现点击超链接后自动发送文字
  • ¥15 用php隐藏类名和增加类名
  • ¥15 算法设计与分析课程的提问
  • ¥15 用MATLAB汇总拟合图
  • ¥15 智能除草机器人方案设计
  • ¥15 对接wps协作接口实现消息发送
  • ¥15 SQLite 出现“Database is locked” 如何解决?