請看RecordManager的constructor:
RecordManager::RecordManager(char *name, int num) {
.........................
Record *pRecordArr = new Record[num]; //問題在此!!!
}
在此處寫 Record* , 表示宣告一個局部變數(LOCAL variable), 而不是對RecordManager的成員變數(MEMBER variable) 給予new Record[num] 的值。
執行完constructor之後,MEMBER variable pRecordArr 並未初始化(initialize),該指針(pointer)並指向無合法的位址(Address),這時你不可以存取pRecordArr指向的 Address,否則會出現ACCESS VIOLATION錯誤。
當program執行到 manager->addRecord(stdid, mk);
進入了RecordManager::addRecord(char *id, int mk)
到了 if (pRecordArr->getvacant()==false)
一叫 Record::bool getvacant(){return vacant;}
就出錯了,因為 pRecordArr 指向不合法的Address, 自然它的Member (vacant)的Address也不合法
改正: 刪去Record * 就可以了, 如希望更清楚的, 可用 this->pRecordArr, 指明pRecordArr是MEMBER variable
另外, 為什麼你的 pRecordArr 後面會跟 . 的?
應該跟->才對!
我的gcc compiler視 pRecordArr. 錯誤的,要pRecordArr-> 才可!