2015-12-02 34 views
0

我正在构建一个从左到右搜索单词搜索矩阵中的一个单词的函数,并且我正在中止(核心转储)。无法找出这个放弃(核心转储)在C

功能:

void lefttoright(int rowcol, char **matrix, char* find){ 

    int i, j, k, q, len, count = 0; 
    len = strlen(find)+1; 

    for (i = 0; i < rowcol; i++){ 
      for (j = 0; j < rowcol; j++){ 
        char* correct = malloc(sizeof(char) * 20); 
        if (matrix[i][j] == find[0]){ 

          for (q = j; q < rowcol; q++){ 
            for (k = 0; k <= len; k++){ 
              if (matrix[i][q] == find[k]){ 
                correct[k] = matrix[i][q]; 
              } 
            } 
          } 
          printf("%s\n", correct); 
          if (strcmp(correct, find) == 0){ 
            count++; 
            free(correct); 
          } 
        } 
        else continue; 
      } 
    } 
    printf("%d", count); 
} 

通过打印语句我发现

if (matrix[i][j] == find[0]){ 

似乎是问题,但我可能是错的。有任何想法吗?提前致谢。

回答

1

一个问题很明显就是你malloc()总是,即使没有匹配。这会像疯了一样泄漏内存。由于您也不需要NULL - 请检查您的分配,可能会导致内存不足,然后由于写入NULL指针而失败。

您应该在调试器中运行程序以获得回溯。