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;
      }
   }
}

提前致谢

4

1 回答 1

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
于 2012-11-03T12:41:07.537 回答