gpt4 book ai didi

c++ - 运行时错误 : reference binding to misaligned address 0xbebebebebebebec6 for type 'int' ,,需要 4 字节对齐 (STL_vector.h)

转载 作者:行者123 更新时间:2023-12-01 14:47:38 25 4
gpt4 key购买 nike

我正在编写代码来解决this problem on leetcode
我解决这个问题的策略是:

  • 为每个单元格索引 (x,y)
  • 运行 dfs
  • 在每个 dfs 调用中检查单元格是否为目标单元格
  • 相应地设置标志
  • 如果两个标志都为真,则将此单元格添加到“ans” vector ,否则继续下一个 dfs
  • class Solution {
    public:
    void psUtil(vector<vector<int> >&mat, int x, int y, int m, int n, int &isP, int &isA, vector<vector<int> >&vis, vector<vector<int> >&ans)
    {
    //check dstinations
    if(x == 0 || y == 0)
    {
    isP = 1;
    }
    if(x == m || y == n)
    {
    isA = 1;
    }

    vector<int> cell(2);
    cell[0] = x;
    cell[1] = y;

    // check both dst rched
    if(isA && isP)
    {
    // append to ans
    ans.push_back(cell);
    return;
    }
    // mark vis
    vis.push_back(cell);

    int X[] = {-1, 0, 1, 0};
    int Y[] = {0, 1, 0, -1};
    int x1, y1;

    // check feasible neighbours
    for(int i = 0; i < 4; ++i)
    {
    x1 = x + X[i];
    y1 = y + Y[i];
    if(x1 < 0 || y1 < 0) continue;

    if(mat[x1][y1] <= mat[x][y])
    {
    vector<vector<int> > :: iterator it;
    vector<int> cell1(2);
    cell1[0] = x1;
    cell1[1] = y1;
    it = find(vis.begin(), vis.end(), cell1);
    if(it == vis.end());
    else continue;
    psUtil(mat, x1, y1, m, n, isP, isA, vis, ans);
    if(isA && isP) return;
    }
    }
    }
    vector<vector<int>> pacificAtlantic(vector<vector<int>>& matrix)
    {
    // find dimensions
    int m = matrix.size(); // rows
    int n = matrix[0].size(); // cols
    vector<vector<int> >ans;
    // flags if rched destinations
    int isP, isA;
    isP = isA = 0;
    // iterate for all indices
    for(int x = 0; x < m; ++x)
    {
    for(int y = 0; y < n; ++y)
    {
    // visited nested vector
    vector<vector<int> >vis;
    psUtil(matrix, x, y, m, n, isP, isA, vis, ans);
    isP = isA = 0;
    }
    }
    return ans;
    }
    };

    我运行这个的错误是
    Runtime Error Message:
    Line 924: Char 9: runtime error: reference binding to misaligned address 0xbebebebebebebec6 for type 'int', which requires 4 byte alignment (stl_vector.h)
    Last executed input:
    [[1,2,2,3,5],[3,2,3,4,4],[2,4,5,3,1],[6,7,1,4,5],[5,1,1,2,4]]

    为什么我会收到此消息,我该如何解决?

    最佳答案

    我发现了我的错误!这是因为新计算的坐标缺少边界检查,并且在 psUtil 开始时对坐标的边界检查不正确。
    而不是这个:

    if(x == m || y == n)
    .
    .
    .
    if(x1 < 0 || y1 < 0) continue;
    应该是这样的:
    if(x == m-1 || y == n-1)
    .
    .
    .
    if(x1 < 0 || y1 < 0 || x1 >= m || y1 >= n) continue;

    关于c++ - 运行时错误 : reference binding to misaligned address 0xbebebebebebebec6 for type 'int' ,,需要 4 字节对齐 (STL_vector.h),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62300729/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com