【发布时间】:2021-05-24 22:40:00
【问题描述】:
我决定检查当我打印 结构实例的内存内容时会得到什么值:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int value;
} Data;
int main(){
Data *d = (Data*) malloc(sizeof(Data));
printf("%d", *d);
return 0;
}
我得到的结果是一个随机值(对我来说),我尝试做各种实验,但不是这样我才能理解这个值背后的原因。但也许我只是不明白结构在内存中的存储方式。我想要一个解释。
【问题讨论】:
-
它没有被初始化,所以是的,它是一个“随机”值。从技术上讲,它是未定义的行为。
-
它没有初始化,所以不知道你会得到什么值。可能发生在你记忆中的任何事情。在某些系统上可能是一致的零,但不要依赖于此。
-
如果你这样做
int d; printf("%d", d)你期望什么输出? -
malloc返回一个指向分配用于存储结构的内存的指针。推迟指针本身并不能保证打印int value,您应该为此执行d->value。无论如何,您还没有初始化结构,因此 C 标准未定义行为。它很可能是以前在分配位置的“垃圾”/未使用内存。 -
@RDev 解决方案是添加
struct关键字,而不是用无意义的 typedef 混淆代码。