2012-11-03 42 views
0

當我運行此代碼時,我得到一個bad_alloc錯誤,我訪問下標操作符錯誤或什麼?對我來說,有意義的是,我去適當的對象,它被返回,然後下標運算符應該踢?順便說我想用數組,而不是載體:)與重載運算符指針數組

class A{ 
    public: 
    A(int size) 
    { 
     array = new int[size]; 
    } 
    int& operator[](const int &i) 
    { 
     return array[i] 
    } 
    private: 
     int * array; 
}; 

int main() { 
    A ** a = new A*[10]; 
    for(int i = 0; i < 10; i++) { 
     a[i] = new A(10); 
     for(int l = 0; l < 10; l++) { 
     cout << a[i][l] << endl; 
     } 
    } 
} 

在此先感謝

+1

通常,分配失敗時會出現bad_alloc錯誤。你確定你只分配10個指針嗎? –

+0

你應該提供'A'類的實現。 – fasked

回答

3

您需要取消引用指針,你可以調用operator[]

cout << (*(a[i]))[l] << endl; 

之前這裏就是需要發生,一步一步:

A* pA = a[i]; 
A& rA = *pA; 
int& val = rA[l]; 
cout << val; 

目前發生這種情況:

A* pA = a[i]; 
A& ra = *(pA + l); // pA is indexed as an array of As - this is wrong 
cout << ra; // invalid memory 
+0

謝謝,我試着做類似的事情,但它不想工作。但是,這完美的作品:) – Crossman