使用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获取错误来分配内存的主要内容,如果未能解决你的问题,请参考以下文章

内存分配(malloc)的过程

如何检查是不是使用 malloc 或 new 分配了内存

使用 new 而不是 malloc 分配内存

Visual Studio 2010 C++:获取 malloc 分配的内存块大小

malloc在函数内分配内存问题

malloc分配内存为多大?