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除调用以外没有其他操作。
修改方法
- 不将二维数组directions在函数之间传来传去,而是直接将其在最前面定义成全局变量;
- 直接在函数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;
}