クラスT、クラスM(抽象クラス)、クラスMC(コンテナー)、クラスAC(MCコンテナーに追加される特定のオブジェクトを作成する)およびメインファイルの5つのファイルがあります。オブジェクト(この場合はAC)を追加し、AC(タイトル)で見つかったデータメンバーを取得するためのこれらの関数があります。
プログラムがコンパイルされ、ACオブジェクトを作成して追加できるようです。ただし、GetTitle関数を使用しようとすると、プログラムがクラッシュし、次のエラーが発生します。
「TLab5.exeの0x00b938e6で未処理の例外:0xC0000005:アクセス違反の読み取り場所0xcccccce4。」</ p>
私が調べたところ、これは不良/初期化されていないポインタがあることを意味します。私のプログラムの唯一のポインタはこれです:
M *C[MCSize] //Found in MC.h
MCのコンストラクターは次のようになります。
MC::MC()
{
cout << "Enter Name: ";
getline(cin, CName);
cout << "Enter size of collection: ";
cin >> CurrentMCSize;
if (CurrentMCSize < 0 || CurrentMCSize > MCSize)
{
cout << "Size is invalid. Please re-enter: ";
cin >> CurrentMCSize;
}; //MCSize is defined in the header of MC.
入力されたタイトルを呼び出す関数は次のとおりです。
void MC::ListMTitles()
{
for (int i = 0; i < CurrentMCSize; i++)
{
cout << i << ". " << Collection[i]->GetTitle();
}
};
//GetTitle is defined in M.cpp
DMAが発生する場所://MC.cpp
void MC::AddM()
{
int Selection;
if(CurrentMCSize < MCSize)
{
DisplayMTypeMenu();
Selection = GetMTypeSelection();
switch(Selection)
{
case 1: Collection[CurrentMCSize] = new AC;
break;
// Other case statements
}
if (0 == Collection[CurrentMCSize])
{
cout << "Error: Memory Allocation Failed.";
exit(1);
}
else
{
cout << "New M Type added!" << endl << endl;
}
CurrentMCSize++;
}
ポインタを正しく初期化していませんか?私の追加機能は実際に私に嘘をついていて、何も追加されていませんか?私は周りを見回しましたが、私が見たほとんどの答えはベクトルを使用することでした。このプロジェクトのために、教授がそれらを調べなかったので、私は使用を許可されていないと思います。