当前位置: 首页 > 知识库问答 >
问题:

【c语言】在vscode上本地调试代码的时候,遇到了段错误,检查了下应该没有数组越界的问题,并且这个答案在lc上也可以通过,请大家帮忙看下什么原因?

翟曦之
2024-07-01

【c语言】在vscode上本地调试代码的时候,遇到了段错误,检查了下应该没有数组越界的问题,并且这个答案在lc上也可以通过,请大家帮忙看下什么原因,感谢!
以下是代码:

#include"string.h"
#include"stdlib.h"
#include"stdio.h"

void makeAround1To0(char** grid, int x, int y, int gridSize, int gridColSize){
    if (y > 0){
        if (grid[x][y - 1] == '1'){
            grid[x][y - 1] = '0';
            makeAround1To0(grid, x, y - 1, gridSize, gridColSize);
        }
    } 
    if (y < gridColSize - 1){
        if (grid[x][y + 1] == '1'){
            grid[x][y + 1] = '0';
            makeAround1To0(grid, x, y + 1, gridSize, gridColSize);
        }
    }

    if (x > 0){
        if (grid[x - 1][y] == '1'){
            grid[x - 1][y] = '0';
            makeAround1To0(grid, x - 1, y, gridSize, gridColSize);
        }
    } 
    if (x < gridSize - 1){
        if (grid[x + 1][y] == '1'){
            grid[x + 1][y] = '0';
            makeAround1To0(grid, x + 1, y, gridSize, gridColSize);
        }
    }
    
    return;
}

int numIslands(char** grid, int gridSize, int* gridColSize) 
{
    int islandCount = 0;
    for (int i = 0; i < gridSize; i++){
        for (int j = 0; j < gridColSize[i]; j++){
            if (grid[i][j] == '1'){
                grid[i][j] = '0';
                makeAround1To0(grid, i, j, gridSize, gridColSize[i]);
                islandCount++;
            }
        }
    }
    return islandCount;
}

char *grid[4] = {
    "11110",
    "11010",
    "11000",
    "00000"
};

int main(void){

    int gridSize = sizeof(grid)/sizeof(grid[0]);
sizeof(grid[0][0]) 将返回 char 类型的大小,通常是1字节。
    int gridColumnSize = strlen(grid[0]);
    int res = numIslands(grid, gridSize, &gridColumnSize);
    printf("%d",res);

}

出现段错误在这里
image.png

不确定是不是不可以修改传的参数,也不清楚属于哪里的知识点,请大牛指路

共有2个答案

伯彦君
2024-07-01
int numIslands(char** grid, int gridSize, int* gridColSize) 

这里面你传的 gridColSize 是个int指针,但不是数组,gridColSize[i]这里得到的值可能是个很大的数字所以出现问题

游乐池
2024-07-01
char *grid[4] = {
    "11110",
    "11010",
    "11000",
    "00000"
};

字符串字面量是不能修改的。

 类似资料: