将指针传递到函数会更改数据并使程序崩溃 我是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 ℘
}
如果是这样,您就遇到了未定义的行为
在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 ℘
}