带有内存错误访问的C++结构new
C++ struct new with memory bad access
我正在尝试从以下内容中创建节点。当我尝试out"int data"时,我可以实例化一个新的结构成员,但添加了另一个成员变量"string name",由于某种原因,我会出现内存泄漏。
struct node
{
string name;
int data;
vector<node*> neighbors;
node(string name, int data, node* neighbor)
{
this->name = name;
this->data = data;
neighbors.push_back(neighbor);
}
explicit node()
: name(NULL), data(NULL), neighbors(NULL) {}
explicit node(string name)
: name(name), data(NULL), neighbors(NULL) {}
};
AN下面一行是我收到错误"EXC_BAD_ACCESS(代码=1,地址=0x0"的地方
int main() {
struct node* root = new node(NULL);
root->name = "root";
root->data = 10;
为什么我只有一个成员变量没有错误,但我又做了一个成员成员变量?我是否缺少初始化内容?我想我正在和上面的建设者一起做。请给我一些建议。
谢谢,
这里有一些错误:
-
不要用NULL初始化
std::string
。如果您想要一个空的string
,请使用默认构造函数或""
, -
当你调用
struct node* root = new node(NULL);
时,你调用构造函数explicit node(string name)
,用NULL初始化字符串会导致一个错误, -
尽可能避免使用指针:
struct node* root = new node();
->struct node root();
, -
您使用
NULL
初始化data
成员,但这是一个integer
。您应该使用0
、对其进行初始化 -
您用
NULL
初始化neighbors
成员,但同样,它不是指针,您可以从成员初始化列表中跳过它,默认构造函数将被调用, -
最后,如果您在C++11中,请避免使用
NULL
、0
或事件nullptr
。
struct node* root = new node(NULL);
调用explicit node(string name)
构造函数,这意味着通过NULL
初始化string
会导致错误。如果要构造一个空字符串,请传递""
。
struct node
{
string name;
int data;
vector<node*> neighbors;
explicit node(string name)
: name(name),
data(NULL), //ERROR, data is int type, not pointer
neighbors(NULL) //ERROR, not pointer
{}
explicit node(const std::string& name = "")
: data(0) // name,neighbors constructors are implicitly called
相关文章:
- 如何循环打印顶点结构
- 通过方法访问结构
- 使用不带参数的函数访问结构元素
- 预处理器:插入结构名称中的前一个行号
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 孤立代码块在结构中引发异常
- 有什么方法可以遍历结构吗
- 如何在 C# 中映射双 C 结构指针?
- 如何在C++中使用结构生成映射
- 无法将结构注册为增强几何体3D点
- 多成员Constexpr结构初始化
- C++将文本文件中的数据读取到结构数组中
- 如何重构类层次结构以避免菱形问题
- 如何在C++中序列化结构数据
- std::vector的包装器,使数组的结构看起来像结构的数组
- 没有为自己的结构调用列表推回方法
- 奇怪的结构&GCC&clang(void*返回类型)
- 在 c++ 中拥有一组结构的正确方法是什么?
- vscode g++链路故障:体系结构x86_64的未定义符号
- C++概念:如何使用'concept'检查模板化结构的属性?