使用malloc获取错误来分配内存

时间:2017-12-25 07:40:14

标签: c memory memory-management malloc

int n;
scanf("%d",&n);
int *score;
score=(int *)malloc(sizeof(int)*n);
int i;
for (i=0;i<n;i++)
{
    scanf("%d",sizeof(int)*i+score);
}
printf("ok");

在上面的代码中我收到错误但是当我评论最后一行printf时,程序运行正常。 问题是什么?? (我想从用户那里给出n号而不使用数组)

2 个答案:

答案 0 :(得分:2)

Policy形式的指针算法已经以score + i的倍数完成。所以当你写sizeof(*score)时,你会加倍乘以项目的大小。你超越了缓冲区的范围。

将其简单地写为score + i * sizeof(int),或者如果您坚持自己进行乘法运算,请务必首先转换为字符指针类型:

score + i

哦,don't cast the result of malloc。 C不需要它,而且它有点单一。

答案 1 :(得分:0)

scanf("%d",sizeof(int)*i+score);

指针算术使用指针类型,所以在这里你要在得分后移动到sizeof(int) i sizeof(int)字节,而只是使用得分+ i。