结构内存内容中的值是啥意思 - C

Posted

技术标签:

【中文标题】结构内存内容中的值是啥意思 - C【英文标题】:What is the meaning of the value inside memory content of a struct - C结构内存内容中的值是什么意思 - C 【发布时间】: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-&gt;value。无论如何,您还没有初始化结构,因此 C 标准未定义行为。它很可能是以前在分配位置的“垃圾”/未使用内存。 @RDev 解决方案是添加 struct 关键字,而不是用无意义的 typedef 混淆代码。 【参考方案1】:

malloc 返回的内存未初始化。在设置之前读取它会导致看到不确定值(即您看到的随机值),并且在某些情况下会触发undefined behavior。无法保证您甚至会从同一个内存位置两次读取相同的值。

您的打印方式也不正确。当给定的格式说明符需要int 时,您将结构的实例传递给printf。这也会导致undefined behavior。

【讨论】:

“在某些情况下”?不是一直这样吗? @klutt 如果有问题的内存位置已被占用,并且用于访问它的左值正确对齐并且没有陷阱表示,则不会。 @dbush 谢谢。这个实例的内存地址是不是一段连续内存的开始? @RonDev 您从malloc 请求了sizeof(Data) 字节,因此返回的地址指向您可以写入的那么多字节。

以上是关于结构内存内容中的值是啥意思 - C的主要内容,如果未能解决你的问题,请参考以下文章

c语言中的RETURN()返回值是啥意思?

_subtreeDescription 输出中的值是啥意思?

CSS属性中的“auto”值是啥意思。

inode 列 (proc/net/tcp(6)) 中的值是啥意思?

C语言中变量加冒号是啥意思

请问c 语言中的 const 是啥意思?