爲什麼下面的代碼只有當我沒有cout語句時纔會發生段錯誤(使用g ++ -std = C++ 11 test.cpp運行): 爲什麼下面的代碼給分段錯誤,只有當我沒有COUT語句(以克++ -std = C++ 11 TEST.CPP運行)只有在不使用cout的情況下C++段錯誤
#include <iostream>
#include <string>
#include <ctype.h>
#include <stdio.h>
#include <algorithm>
#include <vector>
using namespace std;
struct node {
int data;
node *left;
node *right;
node(int d, node *l, node *r) : data{d}, left{l}, right{r} {}
};
node* findNode(node *root, node *find) {
if (!root) return nullptr;
if (root->data == find->data) {
return root;
}
node *left, *right;
if (root->left) left = findNode(root->left, find);
if (root->right) right = findNode(root->right, find);
// Uncomment this to avoid a segfault. Why ?
//cout << "left = " << left << " right = " << right << " find = " << find << endl;
if (left && left->data == find->data) {
return left;
}
if (right && right->data == find->data) {
return right;
}
return nullptr;
}
int main() {
node *newNode1 = new node(20, nullptr, nullptr);
node *newNode2 = new node(60, nullptr, nullptr);
node *root = new node(50, newNode1, newNode2);
findNode(root, newNode1);
return 0;
}
無法重現。代碼爲我編譯和符合 – Fureeish
您可能未初始化'left'和'right',導致未定義的行爲。所以奇怪的東西是相同的課程。 – Sneftel
你有UB,正在泄漏內存。調查智能指針(和stl容器)並初始化變量。 –