为链表中的节点分配内存,但出乎意料的是,它内部的下一个节点也被分配了
allocate memory for node in linked list but unexpectedly, the next node inside it is also allocated
我试图实现一个链表,但当我为一个音符分配内存时,它里面的指针不是NULL。
这是我的结构
template <typename T>
struct Node {
T value;
Node* next;
};
我为纸币分配内存
first = new Node<T>;
第一个->下一个不为NULL。这迫使我将该注释显式指定为NULL。这真的让我很困惑。但是为什么会发生这种事呢?
在设置之前,未初始化指针的地址是未定义的。当您调用new Node<T>
时,您正在调用默认初始化
默认初始化在三种情况下执行:
- 当声明具有自动、静态或线程本地存储持续时间的变量时,不使用初始值设定项
- 当具有动态存储持续时间的对象是由不带初始值设定项的新表达式创建的或当对象是由带初始值设置项的空括号的新表达式来创建的(直到C++03(
- 当构造函数初始值设定项列表中没有提到基类或非静态数据成员,并且调用了该构造函数时
默认初始化的影响是:
- 如果T是非POD(直到C++11(类类型,则考虑构造函数,并对空参数列表进行重载解析。调用所选的构造函数(它是默认构造函数之一(来为新对象提供初始值
- 如果T是数组类型,则默认初始化数组中的每个元素
- 否则,将不执行任何操作:具有自动存储持续时间的对象(及其子对象(将初始化为不确定的值
要初始化struct
值,您需要将其称为
first = new Node<T>();
注意,注释2的后半部分(非粗体部分(在C++11及以后不再为真,现在以下内容为真:
§8.5初始化程序
初始化器是一组空括号的对象,即
()
应进行值初始化。
它有一些垃圾值。您应该在构造函数中初始化它。
Node() : next(0), value(T()) {}
或者你可以直接使用
first = new Node<T>();
对于CCD_ 4。
相关文章:
- 预分配的节点向量中的无锁树节点分配
- 如何在 C++11 的内存池中分配 std::map 的内部RB_tree节点?
- nullptr = 节点分配不正确
- C++错误(从不兼容的类型"void"分配给树节点*)
- 根节点应具有分配的节点,但仍为 NULL。为什么我无法将节点分配给根?
- 将节点添加到链接列表中,而无需明确分配内存空间(无需使用新)
- 是否可以将新的列表节点分配给链表的现有节点
- 在声明节点创建链接列表时,为什么静态内存分配不起作用
- 将指针分配给链接列表节点会引发"Segmentation Fault"
- 如何从链表上的节点为分配的类释放内存
- 如何在速推中为节点分配标签
- 用C++在树中分配节点指针
- 关于在omnetpp.ini中将两个不同的应用程序随机分配到50个节点
- 递归后序遍历解除分配二叉树节点
- 分段 C++中链表节点分配的错误
- C++分配节点指针
- 我们需要为链表节点分配内存吗
- BinaryTree不会分配新创建的节点
- List Traversal w/temp指针-在声明指针时分配指针引用的节点空间有危险
- std::list如何分配节点和元素