2016-02-13 58 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(你还不创建)。这就是为什么你会遇到分段错误。 ;)

希望这有助于!

编辑:另外,不要忘记释放内存!