Closed. This question needs details or clarity。它当前不接受答案。
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
4年前关闭。
我正在编写一个程序,该程序从命令行获取一个数字,并找到该数字的所有主要因素。我想在一个指针数组中收集每个数字的质因数,以便每个指针将针对输入的每个数字指向每个特定的质数组。我目前正在遇到分段错误核心转储,并且根据到目前为止的研究,我似乎正在尝试访问未分配内存或与NULL指针有关的内存。我在下面的代码中指出了发生分段错误的位置。我目前对如何继续不知所措,但我会继续寻找,但与此同时,如果对C有更好了解的人不介意帮助我,那将不胜感激。最终,我必须采用这段代码并使其与pthreads一起使用。
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
4年前关闭。
我正在编写一个程序,该程序从命令行获取一个数字,并找到该数字的所有主要因素。我想在一个指针数组中收集每个数字的质因数,以便每个指针将针对输入的每个数字指向每个特定的质数组。我目前正在遇到分段错误核心转储,并且根据到目前为止的研究,我似乎正在尝试访问未分配内存或与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;
}
最佳答案
事实是,您首先为索引i-1
创建第二个维度,但是在指定的行上,尝试访问索引i
(尚未创建)。这就是为什么您会遇到细分错误。 ;)
希望这可以帮助 !
编辑:另外,别忘了释放内存!
09-20 01:47