質問
「名前と誕生日」のデータベースを作ります.
ユーザが,順番に名前(string型)と誕生日(int型8桁:1998年1月5日なら19980105)を入力します.
その後,誕生日(末尾)が偶数のノードを削除します.
最後に,残った(誕生日が奇数の)データを表示します.
指定の位置に,誕生日が偶数のノードを削除する適切なプログラムを書きなさい
という問題で、回答してデバッグすると
例外がスローされました:読み取りアクセス違反。
current が nullptr でした。
というメッセージが出るのですが、どこをどう修正したらいいのか分かりません。どうすればいいのでしょうか
該当のソースコード
C++
1#include <cstdio> 2#include <iostream> 3using namespace std; 4#include <string> 5 6//ノードの定義 7class Node { 8public: 9 string name; 10 int birthday; 11 Node* next; 12}; 13 14int main() { 15 Node* head; // 先頭ポインタ 16 Node* current; // 現在ポインタ 17 Node* dummy = new Node(); // 末尾ダミーノード 18 Node* tail = dummy; // 末尾ポインタ 19 20 //最初のノードの追加処理 21 Node* add = new Node(); //最初に追加するノード 22 head = add; //先頭は最初の追加ノード 23 cout << "名前は?" << endl; 24 cin >> add->name; 25 cout << "誕生日は?" << endl; 26 cin >> add->birthday; 27 add->next = dummy; //追加ノードのnextはダミー 28 current = add; //現在ポインタを追加ポインタに更新 29 30 char ch; //入力ならy,終了ならn 31 cout << "続けて追加しますか?(y / n)" << endl; 32 cin >> ch; 33 34 //2番目以降のノードの追加処理 35 while (ch == 'y') { 36 Node* add = new Node(); //続けて追加するノード 37 current->next = add; //現在ポインタのnextは追加ポインタ 38 cout << "名前は?" << endl; 39 cin >> add->name; 40 cout << "誕生日は?" << endl; 41 cin >> add->birthday; 42 add->next = dummy; //追加ノードのnextはダミー 43 current = add; //現在ポインタを追加ポインタに更新 44 45 cout << "続けて追加しますか?(y / n)" << endl; 46 cin >> ch; 47 } 48 49 //誕生日が偶数のノードを削除 50 /*ここに適切なプログラムを書きなさい*/ 51 Node* Next =NULL; 52 current = head; 53 54 while (current != tail) { 55 56 if (current->birthday % 2 == 0) { 57 if (Next == tail) { 58 tail = current; 59 } 60 Next = current->next; 61 current->next = Next->next; 62 current->name = Next->name; 63 current->birthday = Next->birthday; 64 65 delete Next; 66 } 67 current = current->next; 68 } 69 70 71 /*ここまで*/ 72 //リストの表示 73 current = head; 74 while (current != tail) { 75 cout << "誕生日:" << current->birthday << ",氏名:" << current->name << endl; 76 current = current->next; 77 } 78 79 return 0; 80} 81
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/21 09:08
2018/06/21 09:11
2018/06/21 23:18
2018/06/22 14:25