當我用寫緩衝區類自我得到一個訪問衝突錯誤:重載下標操作會導致訪問衝突
template<typename T>
class Buffer {
public:
Buffer(T *data, size_t len);
Buffer(size_t len);
size_t len();
operator T*();
T& operator[] (const int x) const {
return this->data[x];
};
private:
T *data;
size_t _len;
};
int main() {
Buffer<char> b("123", 3);
b[0] = 0; // This line causes "Access violation writing location 0x003c8830".
return 0;
}
這是爲什麼?我究竟做錯了什麼?
刪除了'[c]'標籤,這顯然是C++。接下來,我們將不知道如何發生,直到我們看到構造函數,但我有一個模糊的想法... – Xeo
字符串文字是隻讀的,猜測構造函數只是指向傳入的字符串。您可以發佈構造函數定義嗎? – hmjd
你應該爲'data'分配內存 – triclosan