我需要找到一个数字的所有主要因素。我已经编写了这段代码,但是当我尝试使用realloc在calculatePrimes函数中重新分配指针数组时,gcc给出了错误,我在使用realloc之前没有分配指针。我知道我可以传递双指针并在calculatePrimes函数中使用malloc,或者使用单个指针并返回值。
代码:
#include "stdio.h"
#include <math.h>
#include <stdlib.h>
void calculatePrimes(int max, int** array){
int size=1, i;
*array[0]=2;
for(i=0; i<max; i++){
if(isPrime(i)){
*array = (int *)realloc(**array, (++size)*sizeof(int));
*array[size-1]=i;
}
}
}
int isPrime(int value){
int i=2, root = sqrt(value);
for(;i<root;i++){
if(value%i==0) return 0;
}
return 1;
}
void main(int argc, char*argv[]){
int input = atoi(argv[1]), numPrimes;
int *primes=(int *)malloc(sizeof(int));
calculatePrimes(input, &primes);
numPrimes=sizeof(primes)/sizeof(int);
printf("%d\n", numPrimes);
free(primes);
}
答案 0 :(得分:3)
realloc()
的使用不正确。正确如下:
*array = realloc(*array, (++size)*sizeof(int));
当您将**array
传递给realloc()
时,您传递的数组的第一个元素int
而不是int*
的值。
请注意,我也删除了演员。在C中,它不是必需的,可以隐藏您不想隐藏的某些问题。具体来说,它可能会为您malloc/realloc
提供错误的功能签名,如果您的int
和void*
类型不兼容,可能会导致指针损坏。