C程序以友好数字算法返回-1073741819

时间:2015-12-07 10:32:44

标签: c

我正在尝试使C程序找到小于n的友好数字。

Amicable数字是两个不同的数字,因此每个数字的正确除数之和等于另一个数。

友好数字(220,284)的例子;对于220的适当除数是1,2,4,5,10,11,20,22,44,55和110,其中和为284; 284的适当除数分别为1,2,4,71和142,其中总和为220.

到现在为止,我已计算出每个数字的除数之和,并将它们放入数组中;

s [0] = 0,s [1] = 1; s [2] = 1 + 2 = 3,s [3] = 1 + 3 = 4,依此类推。

但我的程序崩溃,调试器中没有任何内容。一切都打印得很好,但毕竟返回-1073741819并且程序崩溃了。

#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;
}

1 个答案:

答案 0 :(得分:7)

int *s,n,i;

s =(int*)malloc(n*sizeof(int));

您正在使用n的值来决定分配多少空间。但您尚未为n分配任何值。