我是 CS 學生的二年級學生,我試圖在寒假期間制作一個劊子手游戲來取樂。我在這里實作了一個選單類的開頭,是的,我知道這對于這個范圍的專案來說太多了,但我打算重用所有這些類。
無論如何,valgrind 告訴我一個大小為 8 的無效讀取,它按順序回傳以下幾行:
menu::getName (menu.cpp:13) (這是在 menu.cpp\getName()\return name;)
menu::print() (menu.cpp:21)(這是在 menu.cpp\print()\cout<<"。回傳到 "<getName();)
main (main.cppp:28) (這是在 main.cpp\main()\thisMenu->print();)
我通常非常擅長解決這些型別的問題,我在網上搜索但找不到解決方案,我完全被難住了。我覺得這可能是一個簡單的問題,我遺漏了一些東西,但我不確定。任何幫助是極大的贊賞!謝謝!
選單.cpp:
#include <vector>
using namespace std;
//contains a list of menus, allowing for us to navigate menus and keep track of where we are via linked list
class menu{
private:
//we will keep track of which menus this one can access via a vector and a parent pointer
vector<menu*> options;
string name="";
menu* parent;
public:
string getName(){
return name;
}
void insert(menu* obj){
options.push_back(obj);
}
//print all the menus this one connects to, i.e. the menus the user can access from here
void print(){
int size=options.size();
**if (parent!=nullptr){
cout<<". return to "<<parent->getName();
}**
for(int i=0; i<size; i ){
cout<<i 2<<". "<<options[i]->getName()<<endl;
}
}
menu* nextMenu(int input){
try{
return(options.at(input));
}
catch(...){
return this;
}
}
menu(string str, menu *parentIn){
parent=parentIn;
name=str;
}
};
主.cpp:
#include "SkipList.h"
#include "menu.cpp"
#include <string>
using namespace std;
int main(int argc, char** argv) {
SkipList *letterBank=new SkipList;
vector<string> wordbank();
//fill the letter bank with all lower case letters
for(char currLetter=97; currLetter<123; currLetter ){
Key currKey=to_string((int)currLetter);
Value currVal=to_string(currLetter);
letterBank->insert(currKey, currVal);
}
menu *MainMenu=new menu(string("Main Menu"), nullptr);
menu *NumOfPlayers=new menu(string("Number of Players"), MainMenu);
menu *PlayerSelect=new menu(string("Player Select"), NumOfPlayers);
menu *Game=new menu(string("Game"), NumOfPlayers);
menu *WordBankMenu=new menu(string("Word Bank Modification"), MainMenu);
MainMenu->insert(NumOfPlayers);
NumOfPlayers->insert(PlayerSelect);
PlayerSelect->insert(Game);
Game->insert(nullptr);
MainMenu->insert(WordBankMenu);
menu *thisMenu= MainMenu;
int input;
while(thisMenu!=nullptr){
thisMenu->print();
cin>>input;
thisMenu=thisMenu->nextMenu(input);
}
}
uj5u.com熱心網友回復:
如果你看這一行:
cout<<". return to "<<parent->getName();
您可以在parent此處訪問的名稱;
但是對于 MainMenu,parentis nullptr,因此它是無效訪問!
該行需要以 parent 不同于nullptr.
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/385069.html
