【发布时间】:2009-03-21 20:01:25
【问题描述】:
我有一个 typedef:
typedef unsigned char MyType[2];
我将它传递给一个函数,结果是失败!
void f(MyType * m)
{
*m[0] = 0x55;
*m[1] = 0x66;
}
void main(void)
{
Mytype a;
a[0] = 0x45;
a[1] = 0x89;
f(&a);
}
main() 中变量 a 的操作适用于 1 字节索引,因此 a 等于 {0x45, 0x89}。但是在函数 f 中,索引作用于 2 个字节(sizeof 类型)。
所以在函数f 中,*m[1] 在这种情况下实际上是在越界修改内存。
这是为什么,我忘记了什么?
谢谢。
【问题讨论】: