使用后结构属性发生变化
Struct attribute changed after usage
在下面的示例中,一旦我们访问 bar
属性,它的值就会自动更改。
typedef struct {
DWORD bar;
} MYTYPE;
void Create(LPVOID *myTypePtr)
{
MYTYPE myType;
myType.bar = 50;
*myTypePtr = &myType;
}
int _tmain(int argc, _TCHAR* argv[])
{
DWORD foo;
MYTYPE *fooPtr;
Create((LPVOID)&foo);
fooPtr = (MYTYPE*)foo;
printf("%d\n", fooPtr->bar); // This prints 50 (ok).
printf("%d\n", fooPtr->bar); // This prints 2147344384 (garbage).
return 0;
}
是的,结构必须作为空指针传递。我可能遗漏了一些转换细节,但我无法获取。使用 Visual C++ 2003 编译。
有什么想法吗?
在函数 Create
中,您使参数 myTypePtr
指向局部自动变量 myType
。函数退出时变量 myType
超出范围,因此在函数退出后取消引用指向它的指针是未定义的行为。
在下面的示例中,一旦我们访问 bar
属性,它的值就会自动更改。
typedef struct {
DWORD bar;
} MYTYPE;
void Create(LPVOID *myTypePtr)
{
MYTYPE myType;
myType.bar = 50;
*myTypePtr = &myType;
}
int _tmain(int argc, _TCHAR* argv[])
{
DWORD foo;
MYTYPE *fooPtr;
Create((LPVOID)&foo);
fooPtr = (MYTYPE*)foo;
printf("%d\n", fooPtr->bar); // This prints 50 (ok).
printf("%d\n", fooPtr->bar); // This prints 2147344384 (garbage).
return 0;
}
是的,结构必须作为空指针传递。我可能遗漏了一些转换细节,但我无法获取。使用 Visual C++ 2003 编译。
有什么想法吗?
在函数 Create
中,您使参数 myTypePtr
指向局部自动变量 myType
。函数退出时变量 myType
超出范围,因此在函数退出后取消引用指向它的指针是未定义的行为。