Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 是什么导致此功能出现分段故障?_C_Segmentation Fault - Fatal编程技术网

C 是什么导致此功能出现分段故障?

C 是什么导致此功能出现分段故障?,c,segmentation-fault,C,Segmentation Fault,我正在编写一个函数,在二维字符数组中搜索列表中的单词。我遇到了一个分段错误,可能是因为我根据回溯设置了while循环,但我看不出是什么导致了它 下面是我认为错误所在的函数的代码。注意:这只是水平搜索的一部分 void searchWord(int j, int k, int gridsize, char** arr, char** list, int listPos){ if(j+strlen(*(list+listPos)) <= gridsize){ //Horizontal

我正在编写一个函数,在二维字符数组中搜索列表中的单词。我遇到了一个分段错误,可能是因为我根据回溯设置了while循环,但我看不出是什么导致了它

下面是我认为错误所在的函数的代码。注意:这只是水平搜索的一部分

void searchWord(int j, int k, int gridsize, char** arr, char** list, int listPos){
if(j+strlen(*(list+listPos)) <= gridsize){ //Horizontal
    int i = 0;
    while(i < strlen(*(list+listPos)) && *(*(arr+(j+i))+k) == *(*(list+(listPos+i)))){
        i++;
    }
    if(i == strlen(*(list+listPos))){
        while(i > 0 && *(*(arr+(j+i))+k) == *(*(list+(listPos+i)))){
        tolower(*(*(arr+(j+i))+k));
        i--;
        }
        for(i = 0; i < strlen(*(list+listPos)); i++)
            printf("%c", *(*(list+listPos)+i));
    }
}
void searchWord(int j、int k、int gridsize、char**arr、char**list、int listPos){
如果(j+strlen(*(list+listPos))0&&*(*(arr+(j+i))+k)==*(*(list+(listPos+i))){
tolower(**(arr+(j+i))+k));
我--;
}
对于(i=0;i
这就是回溯告诉我的

Program received signal SIGSEGV, Segmentation fault.
0x0000000008000fd2 in searchWord (j=0, k=0, gridsize=15, arr=0x8403260, list=0x84032e0, listPos=49)
    at arraysearch.c:110
110                     while(i < strlen(*(list+listPos)) && *(*(arr+(j+i))+k) == *(*(list+(listPos+i)))){
(gdb) bt
#0  0x0000000008000fd2 in searchWord (j=0, k=0, gridsize=15, arr=0x8403260, list=0x84032e0, listPos=49)
    at arraysearch.c:110
#1  0x0000000008000ed4 in searchPuzzle (arr=0x8403260, n=15, list=0x84032e0, listSize=50) at arraysearch.c:96
#2  0x0000000008000d70 in main (argc=2, argv=0x7ffffffee048) at arraysearch.c:68
程序接收信号SIGSEGV,分段故障。
搜索字中的0x0000000008000fd2(j=0,k=0,gridsize=15,arr=0x8403260,list=0x84032e0,listPos=49)
在arraysearch.c:110
110而(i
我修复了分段错误。我正在访问列表中的单词,而不是单词中的字母

*(*(list+(listPos+i)))
需要

*(*(list+listPos)+i)

使用
x[y]
符号比使用
*(x+y)
tolower(x)符号更容易阅读代码
无效,
tolower
是一个宏/函数,它读取输入并返回其输出您可能会访问
arr
列表
的范围之外,但如果不查看整个程序,则无法确定,请阅读