推介:| 修理頂蓬布 | Mediator course | Hypnosis course | Dream Interpretation | NLP | English course |

發新話題
打印

[疑難] 這個是一個什麼的error??? [c++]

請看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-> 才可!

TOP

發新話題


重要聲明:本討論區是以即時上載留言的方式運作,本網站對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。由於本討論區受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者發現有留言出現問題,請聯絡我們。本討論區有權刪除任何留言及拒絕任何人士上載留言,同時亦有不刪除留言的權利。切勿撰寫粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。


Copyright 1997- Xocat. All Right Reserved.