我有這樣一個返回Customer
對象(不是指針)的函數:調用通過一個指針的函數 - 訪問衝突讀取位置
Customer CustomerList::retrieve(const int index) const{
if (index<1 || index>size)
return false;
else{
Node *cur = find(index);
return (cur->data);
}
}
該函數從CustomerList
得到一個Customer
對象(這是一個鏈表)。
我試圖操縱在列表中Customer
具有以下功能(此功能增加了一個Account
到Customer
對象。)
list.retrieve(i).addAccount(acc);
但是這個函數調用後,Customer
對象CustomerList
不更改。我假設原因是我返回了一個Customer
對象的副本,而不是對象本身。
因此,爲了返回客戶的地址並正確操作它,我對我的功能進行了以下更改。
Customer* CustomerList::retrieve(const int index) const{
if (index<1 || index>size)
return false;
else{
Node *cur = find(index);
return &(cur->data);
}
}
,並調用操縱功能類似:
list.retrieve(i)->addAccount(acc);
但它給了我一個「訪問衝突讀取位置0x00000044。」錯誤。我想學的是:
- 爲什麼它不能操縱
Customer
對象?我的假設是否正確? - 當我更改我的函數和函數調用後,它爲什麼會給我上面提到的錯誤?
當你的返回類型是'Customer'時,你如何做'返回false';?將「bool」轉換爲「Customer」是否有意義? – 2013-05-07 14:59:39
你有沒有檢查'cur'是否爲NULL? – Chethan 2013-05-07 15:00:32
向我們展示客戶類別定義 – maverik 2013-05-07 15:00:39