今天,我在ESP32上遇到堆损坏的麻烦。事实证明,错误是由以下行引起的:
u8x8_i2c_cmdinfo* cmdinfo = malloc(sizeof(cmdinfo));
我的意思
u8x8_i2c_cmdinfo* cmdinfo = malloc(sizeof(u8x8_i2c_cmdinfo));
实际上,令我惊讶的是根本没有编译出错误的版本。
为什么起作用?它实际上是做什么的?
答案 0 :(得分:4)
代码之所以编译,是因为变量在声明后存在。这部分只是声明了它:u8x8_i2c_cmdinfo* cmdinfo
。
如果这样做有效,您不会感到惊讶,对吧?
u8x8_i2c_cmdinfo* cmdinfo;
cmdinfo = malloc(sizeof(cmdinfo));
请记住,尽管您的代码可以很好地编译,但它具有令人讨厌的错误。您正在为指针的大小分配空间,很可能不是您要执行的操作。