gpt4 book ai didi

C 程序打印垃圾值

转载 作者:太空宇宙 更新时间:2023-11-04 00:59:04 25 4
gpt4 key购买 nike

我正在尝试创建一个数组并为其赋值。虽然我能够正确分配值,但我无法检索这些值,而且我也不知道为什么。

这是代码片段的一部分。

  void *arr = (void *)(malloc(sizeof(void *) * 5));
int i = 0;
for(i = 0; i < 5; i++) {
*(int *)(arr+i) = initial[i];
printf("Value of array: %d\n", *(int *)(arr+i));
}
for(i = 0; i < 5; i++) {
printf("Pushing: %d\n", *(int *)(arr+i));
DArray_push(result, (arr+i));
}

程序的输出是

Value of array: 4
Value of array: 1
Value of array: 3
Value of array: 2
Value of array: 0
Pushing: 33751300
Pushing: 131841
Pushing: 515
Pushing: 2
Pushing: 0

为什么我的程序能够正确接受值,但当我稍后尝试检索它们时却打印出垃圾值?

最佳答案

打开警告。 (arr+i) 未定义(您不能添加到 void 指针,并且只能在添加之后进行转换)。您会看到未定义的行为。

您进一步分配指针大小的东西,但将其视为 int(更多未定义的行为)。

为什么不写:

  int *arr = malloc(sizeof(int) * 5);
int i = 0;
for(i = 0; i < 5; i++) {
arr[i] = initial[i];
printf("Value of array: %d\n", arr[i]);
}
for(i = 0; i < 5; i++) {
printf("Pushing: %d\n", arr[i]);
}

关于C 程序打印垃圾值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47951575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com