arrays - Invalid object access c++ -
i trying run code stroustroup's c++ book, there code added not available in book. keep hitting following problem. know there multiple questions here on same error, code different , hence question.
the error
copy(5826,0x7fff76b09300) malloc: * error object 0x7ff6a9404c18: incorrect checksum freed object - object modified after being freed. * set breakpoint in malloc_error_break debug abort trap: 6
#include<stdio.h> #include<iostream> using namespace std; class vector { private: double * elem; // elem points array of sz doubles int sz; public: vector(int s) { sz = s; elem = new double[sz]; (int = 0; i<sz; i++) { elem[i] = i; } } ~vector() { delete[] elem; } // destructor: release resources vector(const vector& a); // copy constructor vector& operator=(const vector& a); // copy assignment double& operator[](int i); const double& operator[](int i) const; int size() const; }; vector::vector(const vector& a) // copy constr uctor { elem = new double[sz], // allocate space elements sz = a.sz; (int = 0; != sz; ++i) // copy elements elem[i] = a.elem[i]; } double& vector::operator[](int k) { return this->elem[k]; } vector& vector::operator=(const vector& a) // copy assignment { double* p = new double[a.sz]; (int = 0; != a.sz; ++i) p[i] = a.elem[i]; delete[] elem; // delete old elements elem = p; sz = a.sz; return *this; } int main() { vector v1(10); vector v2 = v1; v1[0] = 2; v2[1] = 3; cout << v1[0] << "\n"; return 0; }
your copy constructor should reverse 2 lines, because didn't set value sz yet.
vector::vector(const vector& a) // copy constructor { elem = new double[sz]; sz = a.sz; (int i=0; i!=sz; ++i) elem[i] = a.elem[i]; } so do
vector::vector(const vector& a) // copy constructor { sz = a.sz; elem = new double[sz]; (int i=0; i!=sz; ++i) elem[i] = a.elem[i]; }
Comments
Post a Comment