【问题标题】:Allocating memory with malloc getting error使用 malloc 分配内存时出错
【发布时间】:2018-06-06 14:15:27
【问题描述】:
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 个数字)

【问题讨论】:

  • scanf("%d",sizeof(int)*i+score);-->scanf("%d",&amp;score[i]);和score=(int *)malloc(sizeof(int)*n);-->score=malloc(sizeof(int)*n);
  • 然后这样做scanf("%d",score+i);
  • scanf("%d", &amp;score[i]);。并检查scanf的返回值。
  • @M.M.:这就是所提到的,然后 OP 评论了一个要求 我不应该使用 [ 或 ]

标签: c memory memory-management malloc


【解决方案1】:
scanf("%d",sizeof(int)*i+score);

指针算法使用指针类型,所以这里你在 score 之后移动到 sizeof(int)isizeof(int) 个字节,而不是只使用 scores+i。

【讨论】:

    【解决方案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 不需要它,而且它有点单调。

    【讨论】:

      猜你喜欢
      • 2018-05-15
      • 1970-01-01
      • 2014-07-17
      • 2013-02-23
      • 1970-01-01
      • 2012-12-26
      • 2012-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多