使用全局变量时的核心转储
Core dump when global variable used
#include <iostream>
int sizeWhileBuilding = 0;
int sizeWhileCounting = 0;
struct Node
{
Node( int theData ) :
data( theData ), left( NULL ), right( NULL )
{ std::cout << "Node::Node() with data " << theData << std::endl; }
int data;
Node* left;
Node* right;
};
Node* insertNode( Node* root, int data )
{
if( !root )
{
++sizeWhileBuilding;
std::cout << "Current size is " << sizeWhileBuilding << std::endl;
std::cout << "Making new node with " << data << std::endl;
root = new Node( data );
}
else if( root->data < data )
{
std::cout << "The node " << root->data << " is lesser than " << data << ". Making right node" << std::endl;
root->right = insertNode( root->right, data );
}
else if( root->data > data )
{
std::cout << "The node " << root->data << " is greater than " << data << ". Making left node" << std::endl;
root->left = insertNode( root->left, data );
}
return root;
}
int main()
{
std::cout << "Making binary tree" << std::endl;
Node* root;
if( root )
{
std::cout << "Root is NOT null after creation" << std::endl;
}
else
{
std::cout << "Root is null after creation" << std::endl;
}
std::cout << "==============================================================================" << std::endl;
root = insertNode( root, 10 );
//Problem line below
std::cout << "The size of the tree is " << sizeWhileBuilding << std::endl;
}
当我在注释掉"问题行"的情况下运行此代码时,它会运行并将节点 10 插入树中。当我使用问题行运行它时,我看到它核心转储。
当我在没有问题行的情况下运行时,我看到主打印开头的 else 部分"创建后根为空"。问题enter code here
行,"打印创建后根不为空"。
我不明白的是为什么 Node* 根;初始化取决于是否使用了全局变量?
Node* root;
root
是一个局部变量,如果不初始化,它的值将是垃圾。因此,有时它可能是空的,其他时候可能是空的。因此,如果使用它会导致未定义的行为,可能会以核心转储结束。解决方案是分配它:
Node* root = nullptr;
也:
我不明白的是为什么 Node* 根;初始化取决于是否使用了全局变量?
如果你的代码中有未定义的行为,那么一切皆有可能,还有你描述的那种奇怪的行为。
相关文章:
- 如何找出GDB的SIGTRAP核心转储的根本原因
- C++映射分割错误(核心转储)
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 浮点异常(核心转储)#694457
- 分段错误(核心转储)但无法弄清楚
- 链接到libkcapi时没有核心转储
- 分段错误(核心转储) - 使用 SavedModel 的 Tensorflow C++ API 进行推断
- 在基数排序中,我得到 munmap_chunk():无效指针和中止(核心转储).为什么?
- C++指针无法在函数外部传递值和分段错误(核心转储)错误
- 合并排序:分段错误核心转储
- C++:分段错误(核心转储)
- 从 pybind11 构建导入模块时出现"分段错误(核心转储)"
- 如何使用 lldb 在曼扎罗中调试 lz4 文件格式的核心转储?
- qt C++命令行代码中的分段错误(核心转储)
- 从文件中读取的数据,但发生核心转储错误
- googletest:测试基类具有纯虚拟方法的派生类时的核心转储
- C++ atof - 分段错误(核心转储)
- Linux C 只禁止我的程序使用核心转储
- 为什么我的代码包含错误分段错误(核心转储)?