【发布时间】:2021-04-13 08:04:49
【问题描述】:
我们已经投射了二维数组:
struct pixel(*image_data)[width] = (struct pixel(*)[width])img->px;
- 我不明白它是如何转换和分配内存的?
宽度:
unsigned width = img->size_x;
和结构图像:
struct image {
uint16_t size_x;
uint16_t size_y;
struct pixel *px;
};
第二个问题:
宽度可以容纳的最大值是多少?
第三:
如果我们迭代 image_data[x][y] 其中 x 和 y 很长,那么是否存在缓冲区溢出?
【问题讨论】:
-
这是缺陷 C 代码。
struct pixel *与struct pixel(*)[width]不兼容。此代码可能有效,也可能无效。你可能到处都有未定义的行为。 -
没有像
unsigned width = img->size_x;中的标题所建议的那样将“uint16_t 转换为 unsigned int”
标签: c casting buffer-overflow integer-overflow