[解決済み] バイナリツリー - コピーコンストラクタ
2022-02-27 19:57:14
質問
バイナリツリーのコピーコンストラクタを作成しようとしています。
私の問題
ソースツリーの値がターゲットツリーにコピーされるのは見えるのですが、値を書き出すときに、コピーされたツリーには値がなく、プログラムがクラッシュしてしまいます。
エラーメッセージ
binTree.exe の 0x0097a43c で未処理の例外が発生しました: 0xC0000005: 場所 0xccccccec を読み取るアクセス違反。
コード
// メインメソッド
int main(int argc, char **) {
ifstream fin6("input_data.txt");
ofstream out9("copied_tree.txt");
if(!fin6.is_open())
{
cout << "FAIL" << endl;
return 1;
}
BinaryTreeStorage binaryTreeStorage2;
// read in values into data structure
binaryTreeStorage2.read(fin6);
BinaryTreeStorage binaryTreeStorage3 = binaryTreeStorage2;
// output values in data structure to a file
binaryTreeStorage3.write(out9);
fin6.close();
out9.close();
// pause
cout << endl << "Finished" << endl;
int keypress; cin >> keypress;
return 0;
}
// コピーコンストラクタ
BinaryTreeStorage::BinaryTreeStorage(BinaryTreeStorage &source)
{
if(source.root == NULL)
root = NULL;
else
copyTree(this->root, source.root);
}
// ツリーをコピーする方法
void BinaryTreeStorage::copyTree(node *thisRoot, node *sourceRoot)
{
if(sourceRoot == NULL)
{
thisRoot = NULL;
}
else
{
thisRoot = new node;
thisRoot->nodeValue = sourceRoot->nodeValue;
copyTree(thisRoot->left, sourceRoot->left);
copyTree(thisRoot->right, sourceRoot->right);
}
}
解決方法は?
関数内でポインタの値(ポインティではない)を変更する場合、そのポインタへの参照を渡さなければなりません。
void BinaryTreeStorage::copyTree(node *& thisRoot, node *& sourceRoot)
関数にポインタを渡すと、このポインタは値で渡されます。ポインタの値(格納しているアドレス)を変更しても、その変更は関数の外からは見えません(これは、関数内で
new
). そこで、関数の外で変更を見えるようにするには、変更したいポインタへの参照を渡す必要があります。
この質問 が詳しく説明しています。
関連
-
[解決済み] C++で、あるコンストラクタを別のコンストラクタから呼び出す(コンストラクタ・チェイニングを行う)ことは可能ですか?
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] scpを使ってリモートからローカルにフォルダをコピーするにはどうしたらいいですか?
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
-
[解決済み] コピーアンドスワップ慣用句とは?
-
[解決済み] C#でベースコンストラクタを呼び出す
-
[解決済み] 家系図ソフトのサイクル
-
[解決済み] コンストラクタ内の仮想メンバー呼び出し
-
[解決済み] あるコンストラクタを別のコンストラクタから呼び出す
-
[解決済み】2分木と2分探索木の違いについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】LLVMで暗黙のうちに削除されたコピーコンストラクタの呼び出し
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み】浮動小数点例外エラーが発生する: 8
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み】#include<iostream>は存在するのですが、「識別子 "cout "は未定義です」というエラーが出ます。なぜですか?
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み】デバッグアサーションに失敗しました
-
[解決済み】c++で.txtファイルから2次元の配列に読み込む