【发布时间】:2015-05-11 14:26:27
【问题描述】:
我试图从 Stroustroup 的 C++ 书中运行这段代码,我添加了一些代码,因为书中没有提供所有内容。我一直遇到以下问题。我知道这里有多个关于同一个错误的问题,但我的代码不同,因此这个问题。
错误是
copy(5826,0x7fff76b09300) malloc: * 对象 0x7ff6a9404c18 的错误:已释放对象的校验和不正确 - 对象可能在被释放后被修改。 * 在 malloc_error_break 中设置断点进行调试 中止陷阱:6
#include<stdio.h>
#include<iostream>
using namespace std;
class Vector {
private:
double * elem; // elem points to an array of sz doubles
int sz;
public:
Vector(int s) {
sz = s;
elem = new double[sz];
for (int i = 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 for elements
sz = a.sz;
for (int i = 0; i != 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];
for (int i = 0; i != 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;
}
【问题讨论】:
标签: c++ arrays memory constructor copy