我有五個文件:類T,類M(抽象類),類MC(容器),類AC(創建一個添加到MC容器中的特定對象)和我的主文件。 我有這些函數來添加一個對象(對於這種情況下,AC),並檢索您在AC(標題)中找到的數據成員。處理未初始化的指針數組的錯誤C++
該程序編譯,看來我可以創建和添加一個AC對象。然而,當我嘗試使用我的getTitle功能,程序崩潰,我得到以下錯誤
「未處理的異常在0x00b938e6在TLAB 5.exe:0000005:訪問 衝突讀取位置0xcccccce4。」
從我擡頭看,這意味着我有一個壞/未初始化的指針。在我的程序的唯一指針是:
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++;
}
我沒有正確初始化我的指針嗎?我的添加功能實際上是對我說謊而沒有添加任何東西?我環顧四周,但是我看到的大部分答案都涉及到使用矢量,爲了這個項目,我認爲我不允許使用這個項目,因爲教授沒有理解它們。
所以它是C++而不是C,對不對? – 2012-12-19 18:33:44
事故發生在哪裏? –
你從0列出'CurrentMCSize',我相信你還沒有創建這些。 – imreal