gpt4 book ai didi

c++ - 自动初始化?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:37:56 24 4
gpt4 key购买 nike

我类的开始是:

class Player{
private:
Cardpile hand;
...
}

Cardpile 是另一个类。如果我执行 Player *p=new Player(); hand 会自动初始化吗?我问这个是因为我一直在试图找出段错误。我在我的代码中到处都看过。我能想到的最后一件事是 hand 没有初始化。

编辑:这是我得到的段错误。 Card 是 Cardpile 中的一个类。我知道 Card 和 Cardpile 都可以。

Program received signal SIGSEGV, Segmentation fault.
0x0000000000402ac0 in __gnu_cxx::new_allocator<Card*>::construct (this=0x6070a8, __p=0x4015c6, __val=@0x7fffffffe6d8) at /usr/include/c++/4.4/ext/new_allocator.h:105
105 { ::new((void *)__p) _Tp(__val); }

编辑:Cardpile 类:

class Cardpile : private vector<Card*> {
public:
using vector<Card*>::size;
using vector<Card*>::at;
Cardpile ();
...
}
Cardpile::Cardpile(){}

编辑:这是一个很酷的事实:p==NULL 不会检查 p 是否已启动。我想这就是为什么我不断收到段错误的原因。

最佳答案

如果你没有明确地成员初始化hand在你的Player构造函数,然后是 Cardpile 的默认构造函数将被使用。

如果您没有定义默认构造函数,编译器会创建一个。

当您使用 -g 编译和链接您的程序时,gdb 可以显示程序崩溃的堆栈跟踪:

gdb program core

然后在 gdb 中输入 bt .这将显示出现段错误时的完整调用堆栈。

关于c++ - 自动初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13555392/

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