C-用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个数字)

表格score + i的指针算术已经在sizeof(*score)的倍数中完成。因此,当您编写score + i * sizeof(int)时,您会双重乘以项目的大小。您超越了缓冲区的范围。

要么简单地将其写成score + i,要么坚持自己执行乘法,请确保首先铸造为角色指针类型:

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

哦,不要抛出malloc的结果。C不需要它,并且有点单调。

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

Pointer Arithmetic使用指针类型,因此您要在得分后移动到sizeof(int) i sizeof(int)字节,而只需使用分数 i。

相关内容

  • 没有找到相关文章

最新更新