使用后更改了Struct属性

时间:2015-05-06 03:03:38

标签: c visual-c++

在以下示例中,一旦我们访问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进行编译。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

在函数Create中,您将参数myTypePtr指向本地自动变量myType。函数退出时变量myType超出范围,因此在函数退出后取消引用指向它的指针的未定义行为。