C程序返回友好数算法中的-1073741819
我正试图用C做一个程序来寻找小于n的友好数 友好数是两个相互关联的不同数,每个数的适当因子之和等于另一个数 友好号码220284的示例;220的真除数为1、2、4、5、10、11、20、22、44、55和110,其和为284;284的真除数是1,2,4,71和142,其中和是220 到目前为止,我已经计算了每个数字的除数之和,并将它们放入一个数组s中 s[0]=0,s[1]=1;s[2]=1+2=3,s[3]=1+3=4,依此类推 但是我的程序崩溃了,调试器里什么都没有。所有内容都打印得很好,但毕竟返回了-1073741819,程序崩溃了C程序返回友好数算法中的-1073741819,c,C,我正试图用C做一个程序来寻找小于n的友好数 友好数是两个相互关联的不同数,每个数的适当因子之和等于另一个数 友好号码220284的示例;220的真除数为1、2、4、5、10、11、20、22、44、55和110,其和为284;284的真除数是1,2,4,71和142,其中和是220 到目前为止,我已经计算了每个数字的除数之和,并将它们放入一个数组s中 s[0]=0,s[1]=1;s[2]=1+2=3,s[3]=1+3=4,依此类推 但是我的程序崩溃了,调试器里什么都没有。所有内容都打印得很好,但
#include <stdio.h>
#include <stdlib.h>
int sumofdivizor(int nr)
{
//nr=number,s=sum of the divisors of nr
int i,s=0;
for(i=1;i<=nr;i++)
{
if(nr%i==0)
{
s=s+i;
}
else continue;
}
return s;
}
int main()
{
int *s,n,i;
s =(int*)malloc(n*sizeof(int));
s[0]=0;
printf("Print a limit number\n");
scanf("%d",&n);
for(i=1;i<n;i++)
{
*(s+i)=sumofdivizor(i);
}
for(i=0;i<n;i++)
printf("s[%d]=%d\n",i,s[i]);
return 0;
}
您正在使用n的值来决定分配多少空间。但是你还没有给n赋值
您正在使用n的值来决定分配多少空间。但是你还没有给n赋值。一个不友好的朋友到底是什么?!那就像一个和平战士,或者一个仁慈的政治家?。。“你没有见过我的邻居。”KerrekSB,谢谢你,我已经编辑了这个帖子。“KerrekSB,我相信一个不友好的朋友的例子是C++中的朋友关键词。@ LundinI,如果你在需要的时候找不到朋友,也许你不知道ADL:—一个不友善的朋友到底是什么?”那就像一个和平战士,或者一个仁慈的政治家?。。“你没有见过我的邻居。”KerrekSB,谢谢你,我已经编辑了这个帖子。“KerrekSB,我相信一个不友好的朋友的例子是C++中的朋友关键词。@ LundinI,如果你在需要的时候找不到朋友,也许你不知道ADL:-谢谢,戴维!这就是问题所在。我刚刚学到了一些关于动态内存分配的知识,但我不太清楚。@AlexB:这太令人惊讶了。我更希望你了解因果关系,或者做事的顺序,而不是动态内存分配。在这个问题上,真正的malloc电话完全是在转移注意力。谢谢你,大卫!这就是问题所在。我刚刚学到了一些关于动态内存分配的知识,但我不太清楚。@AlexB:这太令人惊讶了。我更希望你了解因果关系,或者做事的顺序,而不是动态内存分配。在这个问题上,实际的malloc调用完全是在转移注意力。
int *s,n,i;
s =(int*)malloc(n*sizeof(int));