我剛開始學習C++,並且製作了一個簡單的鏈接列表程序。問題在於,它正在從字符串庫和打印列表中獲取拋出的異常。當我調用malloc時,我將其縮小爲一個錯誤,但我不知道如何修復它,或者其他異常。獲取字符串庫中拋出的異常
// linkedlists.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
struct person {
string name;
int age;
struct person* next;
};
person *head = NULL;
int length() {
int count = 0;
person *current = head;
while (current->age != NULL) {
current = current->next;
count++;
}
return count;
}
void printlist() {
person * current = head;
while (current->next != NULL){ //exception is here.
cout << "Name: " << current->name << " Age: " << current->age << "\n";
current = current->next;
}
}
void insert() {
// int choice;
person *newNode = (struct person*) malloc(sizeof(person));//assuming exception is here because it is showing an exception at the size function in string library, and the struct person has string name.
//cout << "Press 1 to insert at beginning of list.\n";
//cin >> choice;
// switch (choice) {
//case 1:
*newNode->next = *head;
cout << "What is this person's name?\n";
cin >> newNode->name;
cout << "\nWhat is the age of " << newNode->name << "?";
cin >> newNode->age;
cout << "The current list of people is " << length() << " long.\n";
printlist();
}
void menu() {
int choice;
cout << "Welcome to the person recorder! ";
bool inloop = true;
while (inloop) {
cout << "Press 1 to add more entries. Press 2 to print the entire list. Press 3 to exit the program.\n"; //error in string when i press 1. error in the while loop when i press 2.
cin >> choice;
switch (choice) {
case 1:
insert();
case 2:
printlist();
case 3:
inloop = false;
}
}
}
/*void change(person* human) {
string temp_name;
int temp_age;
cout << "What is this person's name?\n";
cin >> temp_name;
cout << "\nWhat is this person's age?\n";
cin >> temp_age;
human->name = temp_name;
human->age = temp_age;
}
*/
int main()
{
menu();
}
這是功課嗎?如果是這樣,你的教授應該停止教授「C++」 –
你應該能夠使用一個調試器準確地追蹤出現程序崩潰的異常。你也沒有真正包括你得到的錯誤。 「例外」可能意味着更多的事情。它們可能是指定爲無效參數引發的異常(例如,接收不是數字的字符串的「std :: stoi」)。它們可以通過實現放置在那裏,標準不太友善(例如,使用GCC從空指針創建'std :: string')。他們甚至可能不是C++異常(例如Windows中的SEH)。全部都有錯誤信息。 – chris