2016-02-13 53 views
-4

我正在編寫一個程序,它從命令行中獲取一個或多個數字,並找到所有數字的素數因子。我想收集指針數組中每個數字的主要因素,以便每個指針都指向輸入的每個數字的每個特定因素組。目前我正在運行一個分段錯誤核心轉儲,並且從目前爲止我能夠研究的內容中,我顯然試圖訪問未分配的內存或與NULL指針有關的某個位置。我在下面的代碼中指出了發現分段錯誤的地方。我目前對如何繼續工作感到茫然,但我會繼續尋找,但同時,如果對C有一點了解的人不會介意幫助我,那將不勝感激。最終,我必須採用此代碼並使其與pthread一起工作。帶2D動態數組的分段錯誤(核心轉儲)

`#include<stdlib.h> 
#include<stdio.h> 
#include<string.h> 
#include<pthread.h>` 

int main(int argc, char** argv){ 
    int **primeFactor = malloc((argc-1)*sizeof(int*)); 
    int i, j, counter, num, prime = 2; 
    for(i = 1; i < argc; i++){ 
      counter = 0; 
      num = atoi(argv[i]); 
      printf("The number is: %d", num); 
      primeFactor[i-1] = malloc((atoi(argv[i])/2)*sizeof(int)); 
      while(num > 1){ 
        while(num % prime == 0){ 
          num /= prime; 
          // Segmentation Fault 
         ==> *primeFactor[i] = prime; 
          printf("\n%d is a factor", prime); 
        } 
        prime++; 
      } 
      prime=2; 
    } 
    printf("\n"); 
    return 0; 
} 

回答

1

的事情是,你首先創建的索引i-1第二個維度,但對您所指定的路線,您嘗試訪問索引i(你還不創建)。這就是爲什麼你會遇到分段錯誤。 ;)

希望這有助於!

編輯:另外,不要忘記釋放內存!