程序尝试添加数字时,我收到堆栈溢出。它似乎正在访问一个不存在的二叉搜索树。这是错误代码: CIS 350中的0x01084DD9处的未处理异常问题2.exe:0xC0000005:访问冲突读取位置0xCDCDCDD5。 有人可以帮忙吗?提前致谢!
#include <iostream>
#include <algorithm> // for permutations
using namespace std;
struct BST
{
BST* left;
BST* right;
int d;
BST(int data)
{
d = data;
BST* left;
BST* right;
cout << d << endl;
}
void add(int data)
{
cout << d << " | " << data << endl;
if (d < data){
if (right == NULL){
right = new BST(data);
}
else{
right->add(data);
}
}
else{
if (left == NULL){
left = new BST(data);
}
else{
left->add(data);
}
}
}
}
int main()
{
BST* test1 = new BST(12);
test1->add(14);
system("pause");
return 0;
}
答案 0 :(得分:0)
正如AlexD在评论中所指出的,分段错误源于struct BST
成员left
和right
未初始化为NULL
的事实。
请注意,这是由错误暗示的,表示&#34;访问冲突读取位置0xCDCDCDD5&#34;。位置0xCDCDCDCD,当使用Microsoft C ++运行时库时,它是一个标记未初始化内存的幻数。
位置0xCDCDCDD5(来自0xCDCDCDCD的8字节偏移)出现,因为代码left->add(data)
尝试在成员left->d
中写入(距left
指向的位置偏移8个字节)。