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号而不使用数组)
答案 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。