使用malloc获取错误来分配内存
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用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))
哦,还有don't cast the result of malloc。 C不需要它,它有点单一。
另一答案
scanf("%d",sizeof(int)*i+score);
指针算术使用指针类型,所以在这里你要在得分后移动到sizeof(int)isizeof(int)字节,而只是使用得分+ i。
以上是关于使用malloc获取错误来分配内存的主要内容,如果未能解决你的问题,请参考以下文章