leetcode报错之 runtime error: load of misaligned address 0x0000ffffffff for type 'int'...

在解决LeetCode问题时,遇到了`runtime error: load of misaligned address`的错误。该错误发生在处理二维数组directions时。文章详细介绍了错误原因、错误发生的代码段,并提供了两种修改方法:一是将数组定义为全局变量,二是将其作为局部变量在函数内定义。作者选择了第二种方法并展示了修改后的程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Authur_Whywait 做一块努力吸收知识的海绵ヾ(≧▽≦*)o

报错内容

Line 11: Char 39: runtime error: load of misaligned address 0x0000ffffffff for type 'int', which requires 4 byte alignment (solution.c)
0x0000ffffffff: note: pointer points here
<memory cannot be printed>

报错部分:

int x_next = i + directions[k][0];
int y_next = j + directions[k][1];

报错部分在一个函数中的位置

void DFS(char** grid, int gridSize, int* gridColSize,int i, int j, int** directions, int directionsSize, int directionsColSize){
    if(grid[i][j]!='1') return;
    
    grid[i][j] = '2';

    for(int k=0; k<directionsSize; k++){
        int x_next = i + directions[k][0];
        int y_next = j + directions[k][1];
        if(x_next<0 || x_next>gridSize-1 || y_next<0 || y_next>(*gridColSize)-1) continue;
        DFS(grid, gridSize, gridColSize, x_next, y_next, directions, directionsSize, directionsColSize);
    }
}

说明:directions是一个二维数组,directionsSize为其行数,directionsColSize为其列数。在整个程序中,对二维数组directions除调用以外没有其他操作。

修改方法

  1. 不将二维数组directions在函数之间传来传去,而是直接将其在最前面定义成全局变量;
  2. 直接在函数DFS函数里面将directions二维数组定义,使其成为函数BFS的内部变量。

修改之后程序展示

我使用了修改方法2


void DFS(char** grid, int gridSize, int* gridColSize,int i, int j){
    if(grid[i][j]!='1') return;   
    grid[i][j] = '2';
    int directions[4][2] = {{-1, 0}, {0, -1}, {1, 0}, {0, 1}}; //把数组的定义位置丢到这里
    for(int k=0; k<4; k++){
        int x_next = i + directions[k][0];
        int y_next = j + directions[k][1];
        if(x_next<0 || x_next>gridSize-1 || y_next<0 || y_next>(*gridColSize)-1) continue;
        DFS(grid, gridSize, gridColSize, x_next, y_next);
    }
}


int numIslands(char** grid, int gridSize, int* gridColSize){
    if(!grid || !gridSize || !(*gridColSize)) return 0;
    int count=0;
    for(int i=0; i<gridSize; i++)
        for(int j=0; j<*gridColSize; j++)
            if(grid[i][j]=='1'){
                 DFS(grid, gridSize, gridColSize, i, j);
                 count++;
            }    
    return count;
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AuthurLEE

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值