シンプルなリンクリストを印刷したいコードを作成しました。リストの情報には、人の名前と電話番号が含まれています。残念ながら、私のリストを印刷するときには、私が最後に読んだ人の名前しか持っていませんが、電話番号は異なります。なぜ私のコードがうまくいかないのか分かりません。人物名でリンクリストを正しく印刷するにはどうすればいいですか?
だから、ここに私のコードは
#pragma once
struct Nodd{
int phone;
char *name;
Nodd *next;
};
void InsertList(Nodd *&L,int nr,char *n);
void PrintList(Nodd *&L);
#include <iostream>
#include "Header.h"
using namespace std;
void InsertList(Nodd *&L,int nr, char *n){
Nodd *p = new Nodd;
p->name = n;
p->phone = nr;
p->next = L;
L = p;
}
void PrintList(Nodd *&L){
Nodd *p = L;
while(p){
cout << p->name << " " << p-> phone << endl;
p = p->next;
}
}
#include <iostream>
#include "Header.h"
using namespace std;
int main(){
Nodd *L = 0; //L = first element of the linked list
int nr, i, t;
char *n;
n = new char;
cout <<"Read number of people: ";
cin >> t;
for(i = 0; i < t; i++){
cout << "Name: ";
cin.ignore(50, '\n');
cin.getline(n, 50);
cout << "Phone number: ";
cin >> nr;
InsertList(L, nr, n);
}
PrintList(L);
return 0;
}
そして、何私がコンパイルされた次のとおりです。人々の
読む番号:2
Name: Elena
Phone number: 99776244
Name: Andreea
Phone number: 98776489
.......... ..................
Andreea 98776489
Andreea 99776244
コードを修正する方法を教えてください。それは未定義の動作であるので、あなたは、単一の文字変数に割り当てる50文字を見ることができるよう
cin.getline(n, 50); UB here
:
char *n;
n = new char; // A single dynamic character
以降:
実際に問題のあるセクションへのコードをデバッガを使用するか短縮してください。 – kim366
'n = new char;'は何をしますか?あなたはこれがそうだと思いますか? char *の代わりにstd :: stringを使用してください! –
'n = new char;'ヒープ上に1文字のみを割り当てます。 'n = new char; [size]'を使って、ここで必要なものを推測します。また、 'delete [] n'を使ってメモリを解放することを忘れないでください。 – Raindrop7