我正在编写一个程序,它从命令行中取一个数字,并找到所述数字的所有主要因素。我想收集指针数组中每个数字的素因子,以便每个指针指向输入的每个数字的每个特定的素数因子组。我目前正在进行分段故障核心转储,到目前为止我已经能够研究,我显然试图访问未分配内存或与NULL有关的地方指针。我在下面的代码中指出我发现了分段错误。我目前不知道如何继续,但我会继续寻找,但与此同时,如果对C有一点了解的人不会介意帮助我,那就是非常感激。最终我必须使用此代码并使其与pthreads一起使用。
`#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;
}
答案 0 :(得分:1)
首先,您要为索引i-1
创建第二个维度,但是在您指定的行上,您尝试访问索引i
(您尚未创建索引) )。这就是你得到分段错误的原因。 ;)
希望这有帮助!
编辑:另外,不要忘记释放内存!