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

问题描述 投票:0回答:2
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号而不使用数组)

c memory memory-management malloc
2个回答
2
投票

score + i形式的指针算法已经以sizeof(*score)的倍数完成。因此,当你写score + i * sizeof(int)时,你会倍增乘以物品的大小。你超越了缓冲区的范围。

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

(int*)((char*)score + i * sizeof(int))

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


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

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

© www.soinside.com 2019 - 2024. All rights reserved.