2015-12-02 36 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指針而失敗。

您應該在調試器中運行程序以獲得回溯。