Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在某些特定情况下访问数组时发生运行时错误_C_Arrays_Pointers_Runtime Error_Prime Factoring - Fatal编程技术网

C 在某些特定情况下访问数组时发生运行时错误

C 在某些特定情况下访问数组时发生运行时错误,c,arrays,pointers,runtime-error,prime-factoring,C,Arrays,Pointers,Runtime Error,Prime Factoring,我有下面的代码来生成一个数的素因子。除了一些数字外,它对所有数字都很好。我在这些数字中得到的错误是运行时错误,它位于第5行和第10行,当尝试访问“factors”数组时 还有为什么它在访问第15行和第18行中的“factors”数组时没有给出错误。 *这对于大于或小于48598496894的数字都非常有效,但对于48598496894则不然 void getfactors(unsigned long long n){ unsigned long long *factors,i=0,k=0

我有下面的代码来生成一个数的素因子。除了一些数字外,它对所有数字都很好。我在这些数字中得到的错误是运行时错误,它位于第5行和第10行,当尝试访问“factors”数组时

还有为什么它在访问第15行和第18行中的“factors”数组时没有给出错误。 *这对于大于或小于48598496894的数字都非常有效,但对于48598496894则不然

void getfactors(unsigned long long n){
    unsigned long long *factors,i=0,k=0;

    //array to store prime factors//
    factors=(unsigned long long *)malloc(n*sizeof(unsigned long long));

    //getting 2's which are factors of the number//
    while(n%2==0){
        factors[k++]=2;  //line 5
        n=n/2;
    }

    //getting other prime factors of the number//
    for(i=3;i<=sqrt(n);i=i+2){
        while(n%i==0){
            factors[k++]=i;  //line 10
            n=n/i;
        }
    }

    //last prime factor of number//
    if(n>2)
        factors[k++]=n;  //line 15
    printf("%d\n\n",k);

    //printing all factors//
    for(i=0;i<k;i++)
        printf("%llu\n",factors[i]);  //line 18
}
int main()
{
    getfactors(48598496894);
    return 0;
}
void getfactors(无符号长n){
无符号长*因子,i=0,k=0;
//存储素因子的数组//
因子=(无符号长*)malloc(n*sizeof(无符号长));
//得到2,这是数字的因子//
而(n%2==0){
系数[k++]=2;//第5行
n=n/2;
}
//得到这个数的其他素数因子//
对于(i=3;i2)
系数[k++]=n;//第15行
printf(“%d\n\n”,k);
//打印所有因素//

对于(i=0;i您应该在
malloc
之后检查factors是否为
NULL
,以防分配失败。您还需要调用
free
来释放分配的内存。如果您对代码进行注释以解释您的预期行为,这也会有所帮助

为了解决您的问题,我建议您在调试时检查数组索引。如果您在开始时使用较小的输入值,直到您知道您的算法有效为止,这可能会更容易

还有一点是您是否需要factors数组?如果函数的目的是打印基本因子,您不能在找到它们时打印它们吗

编辑


我认为@BLUEPIXY在评论中已经暗示了这个问题。
malloc
的输入参数是
size\u t
。在我的电脑上
size\u t
是32位的值。如果在你的平台上是这样,那么你试图分配的内存块的大小太大。检查
(n*sizeof(unsigned long-long))>SIZE_MAX
。正如我前面提到的,您可以在找到因子时打印它们并删除数组吗?

调试告诉您什么?可能是文字数
48598496894
被解释为负数?@Jongware-无论如何,为什么我在尝试访问因子数组时出现运行时错误?请检查
>尺寸(尺寸)
@sclarke8--我已经对代码进行了注释。这对大于或小于48598496894的数字都非常有效,只是对48598496894无效。感谢您对代码进行注释。我已经更新了我的答案;我希望这会有所帮助。@sclarke9-实际上,我需要先打印素数因子的数量,然后打印因子本身,为此我有e将因子存储在某个地方……大小不是问题,因为正如我所说的,对于小于或大于48598496894的数字,代码都可以正常工作。