gpt4 book ai didi

c - 使用后结构体属性发生变化

转载 作者:行者123 更新时间:2023-11-30 15:20:20 25 4
gpt4 key购买 nike

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

有什么想法吗?

最佳答案

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

关于c - 使用后结构体属性发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30066719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com