【发布时间】:2013-04-18 23:11:01
【问题描述】:
我需要找出一个数的所有质因数。我已经编写了这段代码,但是当我尝试使用 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);
}
【问题讨论】:
-
您应该显示确切的错误,因为您的重新措辞(“gcc 给出了我之前没有分配函数的错误”)没有多大意义。函数未分配...
-
不要强制转换 malloc 或 realloc 的返回值,它可以隐藏某些细微的错误。
标签: c pointers malloc argument-passing realloc