如何找到一个数字的原始根

时间:2012-04-25 07:32:37

标签: c malloc

这是我试图编译的代码,用于查找原始根...但它给出了错误。

int isPrimitive (int q, int a) {
int i,z;
double k,s;

s=1;
i=0;

double *factors=malloc(sizeof(double)*q-2);    

while (s>0 && i<q-2) {
    k=pow(a,i);
    s=k-(q*floor(k/q));
    for (z=0;z<(sizeof(*factors)/sizeof(factors[0]));z++) {
        if (factors[z]==s) {
            return 0;
        }
    }
    factors[i]=s;
    i++;
}

此处double *factors=malloc(sizeof(double)*q-2);行 //错误无效转换从void *到double *来了。

1 个答案:

答案 0 :(得分:3)

问题几乎可以肯定是在C代码上使用C ++编译器。在C void*中可以转换为任何没有强制转换的指针类型,而在C ++中则不然,因此错误消息。基本上有两种解决方案:使用C编译器(例如gcc而不是g++),或者转换malloc的结果。

后者可以通过以下方式完成:

double *factors = static_cast<double*> (malloc(sizeof(double)*(q-2)));

但是如果你实际上在编写C ++,那么使用new []语法会更好:

double *factors = new double [q-2];

(请注意,这需要使用delete[] factors代替free(factors)

相关问题