【问题标题】:Why is the 3rd element initialized to a garbage value?为什么第三个元素初始化为垃圾值?
【发布时间】:2021-09-02 10:59:37
【问题描述】:

我正在使用 Xcode 在 C 中处理数组的基本内存分配。

这是我的代码:

   int *arr; // creating pointer

arr=(int*) malloc(3*sizeof(int)); // allocating memory in heap

printf("%d\n", arr[0]);
printf("%d\n", arr[1]);
printf("%d\n", arr[2]);

int a = 3;
int b = 4;
int c = 5;


arr[0] = a;
arr[1] = b;
arr[2] = c;

printf("%d\n", arr[0]);
printf("%d\n", arr[1]);
printf("%d\n", arr[2]);

我得到的输出是:

0
0
268744246
3
4
5

为什么第三个值初始化为 268744246 而不是像前两个值那样为 0?

【问题讨论】:

  • 碰巧。通过malloc()分配的缓冲区的初始值是不确定的。
  • 如果您想要将其初始化为零,请改用callocarr = (int*) calloc(3,sizeof(int));
  • 非常感谢

标签: arrays c xcode initialization malloc


【解决方案1】:

函数malloc()对分配的内存内容没有影响,

因此,在调用 malloc() 之后,分配的内存中的任何垃圾仍然存在

注意:由于输出未初始化内存的内容,此代码确实会显示未定义的行为

如果你想初始化分配的内存(到 0x00 )然后使用函数:calloc()

【讨论】:

    猜你喜欢
    • 2021-03-19
    • 1970-01-01
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    • 2022-01-14
    • 2016-03-02
    相关资源
    最近更新 更多