为什么sizeof在尚未存在的变量上成功?

时间:2019-01-22 19:28:30

标签: c esp32

今天,我在ESP32上遇到堆损坏的麻烦。事实证明,错误是由以下行引起的:

u8x8_i2c_cmdinfo* cmdinfo = malloc(sizeof(cmdinfo));

我的意思

u8x8_i2c_cmdinfo* cmdinfo = malloc(sizeof(u8x8_i2c_cmdinfo));

实际上,令我惊讶的是根本没有编译出错误的版本。

为什么起作用?它实际上是做什么的?

1 个答案:

答案 0 :(得分:4)

代码之所以编译,是因为变量在声明后存在。这部分只是声明了它:u8x8_i2c_cmdinfo* cmdinfo

如果这样做有效,您不会感到惊讶,对吧?

u8x8_i2c_cmdinfo* cmdinfo;
cmdinfo = malloc(sizeof(cmdinfo));

请记住,尽管您的代码可以很好地编译,但它具有令人讨厌的错误。您正在为指针的大小分配空间,很可能不是您要执行的操作。