为什么 sizeof 在尚未存在的变量上成功?
Why sizeof succeeds on not yet exsisting variable?
今天我遇到了 ESP32 上损坏的堆的问题。事实证明,错误是由这一行引起的:
u8x8_i2c_cmdinfo* cmdinfo = malloc(sizeof(cmdinfo));
当我的意思
u8x8_i2c_cmdinfo* cmdinfo = malloc(sizeof(u8x8_i2c_cmdinfo));
编译错误的版本实际上让我很惊讶。
为什么有效?它实际上做了什么?
代码编译通过,因为变量在其声明之后存在。这部分只是声明它:u8x8_i2c_cmdinfo* cmdinfo
.
如果这有效,您不会感到惊讶,对吗?
u8x8_i2c_cmdinfo* cmdinfo;
cmdinfo = malloc(sizeof(cmdinfo));
请记住,虽然您的代码可以正常编译,但它有一个严重的错误。您正在为指针的大小分配 space,很可能不是您想要的。
今天我遇到了 ESP32 上损坏的堆的问题。事实证明,错误是由这一行引起的:
u8x8_i2c_cmdinfo* cmdinfo = malloc(sizeof(cmdinfo));
当我的意思
u8x8_i2c_cmdinfo* cmdinfo = malloc(sizeof(u8x8_i2c_cmdinfo));
编译错误的版本实际上让我很惊讶。
为什么有效?它实际上做了什么?
代码编译通过,因为变量在其声明之后存在。这部分只是声明它:u8x8_i2c_cmdinfo* cmdinfo
.
如果这有效,您不会感到惊讶,对吗?
u8x8_i2c_cmdinfo* cmdinfo;
cmdinfo = malloc(sizeof(cmdinfo));
请记住,虽然您的代码可以正常编译,但它有一个严重的错误。您正在为指针的大小分配 space,很可能不是您想要的。