将指针传递到函数会更改数据并使程序崩溃 我是C++新手,不是OOP。这次撞车把我弄糊涂了

将指针传递到函数会更改数据并使程序崩溃 我是C++新手,不是OOP。这次撞车把我弄糊涂了,c++,C++,这是我的主要作品之一。这个代码有效。它打印我想要打印的东西 int _tmain(int argc, _TCHAR* argv[]) { Weapon* wp = createWeapon(); cout <<wp->name << " " << wp->maxAttack << " " << wp->minAttack; //<<---Works fine } int-tmain(in

这是我的主要作品之一。这个代码有效。它打印我想要打印的东西

int _tmain(int argc, _TCHAR* argv[]) {
    Weapon* wp = createWeapon();

    cout <<wp->name << " " << wp->maxAttack << " " << wp->minAttack; //<<---Works fine
}
int-tmain(int-argc,_-TCHAR*argv[]{
武器*wp=createwearm();

cout在VC++中,调试器将未分配变量的值设置为每字节204,或者与您的情况相同-0xCCCC


这意味着您的createbluer()返回未初始化的指针。

您没有向我们显示您的
createbluer()
。但是我猜
createbluer()
返回局部变量的指针。您的函数是这样的吗

Weapon* createWeapon()
{
    Weapon wp(/*blabla*/);
    // ...
    return &wp;
}
如果是这样,您就遇到了未定义的行为

createbluer()
的末尾,
wp
变量,即
createbluer()
的局部变量被销毁。因此,返回的指针指向“销毁”对象。如果您尝试取消引用该指针,程序将陷入未定义的行为,这意味着没有人知道会发生什么


但是,直接调用
createweaponinfo()
后,
wp
变量可能处于活动状态-因为堆栈帧尚未触及。这就是第一个示例似乎有效的原因。但在第二个示例中,您调用了
showWeaponInfo(),调用更改堆栈框架。< /P> C++和C++是不同的语言!不要向C++问题添加C标记。需要查看更多代码。<代码>创建武器()/Cuth>?<代码>武器>代码>什么?<代码>创建武器()
如果您没有连接3D打印机,可能会崩溃。另外,请不要发布代码的图像,而是以文本形式发布。很可能,它在
main()
中工作纯属运气。按预期工作是UB的一种有效形式。您可能在某个地方有错误,或者在
createwearm()中
,或者其他地方。我知道这没有多大帮助,但你应该展示更多的代码。至少,展示
createbluer()
。事实确实如此。现在我只需要找出如何编写代码来克服它。非常感谢!@Majkie我想你只想通过值返回-就像
createbluer(){…return wp;}与其他现代OOP语言不同,我们需要关心C++世界中的“值或指针”。
Weapon* createWeapon()
{
    Weapon wp(/*blabla*/);
    // ...
    return &wp;
}