在以下示例中,一旦我们访问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;
}
是的,结构必须作为void指针传递。我可能错过了一些转换细节,但我无法得到它。使用Visual C ++ 2003进行编译。
有什么想法吗?
答案 0 :(得分:1)
在函数Create
中,您将参数myTypePtr
指向本地自动变量myType
。函数退出时变量myType
超出范围,因此在函数退出后取消引用指向它的指针的未定义行为。