我有一个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);
}
a
中变量main()
的操作适用于1字节索引,因此a
等于{0x45,0x89}。但是在函数f
中,索引作用于2个字节(sizeof
类型)。
因此在函数f
中,此实例中的*m[1]
实际上是在修改内存超出范围。
为什么这样,我忘记了什么?
感谢。
答案 0 :(得分:4)
尝试:
(*m)[1]
而不是*m[1]
答案 1 :(得分:1)
啊,只是在放弃之后就解决了! Brackets Boy,Brackets。
void f(MyType * m)
{
(*m)[0] = 0x55;
(*m)[1] = 0x66;
}
void main(void)
{
Mytype a;
a[0] = 0x45;
a[1] = 0x89;
f(&a);
}