When you run ./a.out, it produces a monstrous message:
*** glibc detected *** ./a.out: free(): invalid pointer: 0x08049ff4 ***
======= Backtrace: =========
/lib/libc.so.6(+0x6c501)[0x42e501]
/lib/libc.so.6(+0x6dd70)[0x42fd70]
/lib/libc.so.6(cfree+0x6d)[0x432e5d]
/usr/lib/libstdc++.so.6(_ZdlPv+0x21)[0xc36441]
/usr/lib/libstdc++.so.6(_ZdaPv+0x1d)[0xc3649d]
./a.out[0x8048801]
./a.out[0x804864d]
/lib/libc.so.6(__libc_start_main+0xe7)[0x3d8ce7]
./a.out[0x8048501]
======= Memory map: ========
003c2000-00519000 r-xp 00000000 08:05 261168 /lib/libc-2.12.1.so
00519000-0051a000 ---p 00157000 08:05 261168 /lib/libc-2.12.1.so
0051a000-0051c000 r--p 00157000 08:05 261168 /lib/libc-2.12.1.so
0051c000-0051d000 rw-p 00159000 08:05 261168 /lib/libc-2.12.1.so
0051d000-00520000 rw-p 00000000 00:00 0
005a6000-005c2000 r-xp 00000000 08:05 261144 /lib/ld-2.12.1.so
005c2000-005c3000 r--p 0001b000 08:05 261144 /lib/ld-2.12.1.so
v005c3000-005c4000 rw-p 0001c000 08:05 261144 /lib/ld-2.12.1.so006a4000-006a5000 r-xp 00000000 00:00 0 [vdso]
v0087d000-00897000 r-xp 00000000 08:05 261202 /lib/libgcc_s.so.1
00897000-00898000 r--p 00019000 08:05 261202 /lib/libgcc_s.so.1
00898000-00899000 rw-p 0001a000 08:05 261202 /lib/libgcc_s.so.1
00b8c000-00c6b000 r-xp 00000000 08:05 396181 /usr/lib/libstdc++.so.6.0.14
00c6b000-00c6f000 r--p 000de000 08:05 396181 /usr/lib/libstdc++.so.6.0.14
00c6f000-00c70000 rw-p 000e2000 08:05 396181 /usr/lib/libstdc++.so.6.0.14
00c70000-00c77000 rw-p 00000000 00:00 0
00f84000-00fa8000 r-xp 00000000 08:05 261217 /lib/libm-2.12.1.so
00fa8000-00fa9000 r--p 00023000 08:05 261217 /lib/libm-2.12.1.so
00fa9000-00faa000 rw-p 00024000 08:05 261217 /lib/libm-2.12.1.so
08048000-08049000 r-xp 00000000 08:05 131889 /home/mr_bunch/a.out
08049000-0804a000 r--p 00000000 08:05 131889 /home/mr_bunch/a.out
0804a000-0804b000 rw-p 00001000 08:05 131889 /home/mr_bunch/a.out
0832d000-0834e000 rw-p 00000000 00:00 0 [heap]
b7700000-b7721000 rw-p 00000000 00:00 0
b7721000-b7800000 ---p 00000000 00:00 0
b7835000-b7838000 rw-p 00000000 00:00 0
b7845000-b7847000 rw-p 00000000 00:00 0
bfee1000-bff02000 rw-p 00000000 00:00 0 [stack]
006a4000-006a5000 r-xp 00000000 00:00 0 [vdso]
v0087d000-00897000 r-xp 00000000 08:05 261202 /lib/libgcc_s.so.1
00897000-00898000 r--p 00019000 08:05 261202 /lib/libgcc_s.so.1
00898000-00899000 rw-p 0001a000 08:05 261202 /lib/libgcc_s.so.1
00b8c000-00c6b000 r-xp 00000000 08:05 396181 /usr/lib/libstdc++.so.6.0.14
00c6b000-00c6f000 r--p 000de000 08:05 396181 /usr/lib/libstdc++.so.6.0.14
00c6f000-00c70000 rw-p 000e2000 08:05 396181 /usr/lib/libstdc++.so.6.0.14
00c70000-00c77000 rw-p 00000000 00:00 0
00f84000-00fa8000 r-xp 00000000 08:05 261217 /lib/libm-2.12.1.so
00fa8000-00fa9000 r--p 00023000 08:05 261217 /lib/libm-2.12.1.so
00fa9000-00faa000 rw-p 00024000 08:05 261217 /lib/libm-2.12.1.so
08048000-08049000 r-xp 00000000 08:05 131889 /home/mr_bunch/a.out
08049000-0804a000 r--p 00000000 08:05 131889 /home/mr_bunch/a.out
0804a000-0804b000 rw-p 00001000 08:05 131889 /home/mr_bunch/a.out
0832d000-0834e000 rw-p 00000000 00:00 0 [heap]
b7700000-b7721000 rw-p 00000000 00:00 0
b7721000-b7800000 ---p 00000000 00:00 0
b7835000-b7838000 rw-p 00000000 00:00 0
b7845000-b7847000 rw-p 00000000 00:00 0
bfee1000-bff02000 rw-p 00000000 00:00 0 [stack]
Аварийный останов. Вот код:
#include <stdio.h> #include <math.h> #include <cstring> class Vectorn { protected: int dim; double *X; public: Vectorn() { dim = 0; X = NULL; }; Vectorn(int _dim) { dim = _dim; X = new double[dim]; }; Vectorn(int _dim, double *_X) { dim = _dim; X = new double[dim]; for (int i = 0; i < dim; i++) X[i] = _X[i]; }; Vectorn(const Vectorn & _C) { dim = _C.dim; X = new double[dim]; for (int i = 0; i < dim; i++) X[i] = _C.X[i]; }; ~Vectorn() { dim = 0; if (X) delete[]X; X = NULL; }; int operator ==(Vectorn C) { if (dim != C.dim) return 0; for (int i = 0; i < dim; i++) if (X[i] != CX[i]) return 0; return 1; } Vectorn operator =(Vectorn C) { if (C == *(this)) { return *(this); }; int i; if (dim < C.dim) { for (i = 0; i < dim; i++) { X[i] = CX[i]; }; } else { for (i = 0; i < C.dim; i++) { X[i] = CX[i]; }; }; }; Vectorn operator +=(Vectorn C) { for (int i = 0; i < dim; i++) X[i] += CX[i]; return *this; }; Vectorn operator -=(Vectorn C) { for (int i = 0; i < dim; i++) X[i] -= CX[i]; return *this; }; Vectorn operator *=(double n) { for (int i = 0; i < dim; i++) X[i] *= n; return *this; }; void Print() { printf("Vector("); for (int i = 0; i < dim; i++) printf("%+lf_", X[i]); printf(")\n"); }; }; int main() { double g[4] = { 7., 5., 8., 0. }; Vectorn C(4); Vectorn D(4, g); C = D; C.Print(); D.Print(); }
Аварийный останов. Вот код:
#include <stdio.h> #include <math.h> #include <cstring> class Vectorn { protected: int dim; double *X; public: Vectorn() { dim = 0; X = NULL; }; Vectorn(int _dim) { dim = _dim; X = new double[dim]; }; Vectorn(int _dim, double *_X) { dim = _dim; X = new double[dim]; for (int i = 0; i < dim; i++) X[i] = _X[i]; }; Vectorn(const Vectorn & _C) { dim = _C.dim; X = new double[dim]; for (int i = 0; i < dim; i++) X[i] = _C.X[i]; }; ~Vectorn() { dim = 0; if (X) delete[]X; X = NULL; }; int operator ==(Vectorn C) { if (dim != C.dim) return 0; for (int i = 0; i < dim; i++) if (X[i] != CX[i]) return 0; return 1; } Vectorn operator =(Vectorn C) { if (C == *(this)) { return *(this); }; int i; if (dim < C.dim) { for (i = 0; i < dim; i++) { X[i] = CX[i]; }; } else { for (i = 0; i < C.dim; i++) { X[i] = CX[i]; }; }; }; Vectorn operator +=(Vectorn C) { for (int i = 0; i < dim; i++) X[i] += CX[i]; return *this; }; Vectorn operator -=(Vectorn C) { for (int i = 0; i < dim; i++) X[i] -= CX[i]; return *this; }; Vectorn operator *=(double n) { for (int i = 0; i < dim; i++) X[i] *= n; return *this; }; void Print() { printf("Vector("); for (int i = 0; i < dim; i++) printf("%+lf_", X[i]); printf(")\n"); }; }; int main() { double g[4] = { 7., 5., 8., 0. }; Vectorn C(4); Vectorn D(4, g); C = D; C.Print(); D.Print(); }
Аварийный останов. Вот код: #include <stdio.h> #include <math.h> #include <cstring> class Vectorn { protected: int dim; double *X; public: Vectorn() { dim = 0; X = NULL; }; Vectorn(int _dim) { dim = _dim; X = new double[dim]; }; Vectorn(int _dim, double *_X) { dim = _dim; X = new double[dim]; for (int i = 0; i < dim; i++) X[i] = _X[i]; }; Vectorn(const Vectorn & _C) { dim = _C.dim; X = new double[dim]; for (int i = 0; i < dim; i++) X[i] = _C.X[i]; }; ~Vectorn() { dim = 0; if (X) delete[]X; X = NULL; }; int operator ==(Vectorn C) { if (dim != C.dim) return 0; for (int i = 0; i < dim; i++) if (X[i] != CX[i]) return 0; return 1; } Vectorn operator =(Vectorn C) { if (C == *(this)) { return *(this); }; int i; if (dim < C.dim) { for (i = 0; i < dim; i++) { X[i] = CX[i]; }; } else { for (i = 0; i < C.dim; i++) { X[i] = CX[i]; }; }; }; Vectorn operator +=(Vectorn C) { for (int i = 0; i < dim; i++) X[i] += CX[i]; return *this; }; Vectorn operator -=(Vectorn C) { for (int i = 0; i < dim; i++) X[i] -= CX[i]; return *this; }; Vectorn operator *=(double n) { for (int i = 0; i < dim; i++) X[i] *= n; return *this; }; void Print() { printf("Vector("); for (int i = 0; i < dim; i++) printf("%+lf_", X[i]); printf(")\n"); }; }; int main() { double g[4] = { 7., 5., 8., 0. }; Vectorn C(4); Vectorn D(4, g); C = D; C.Print(); D.Print(); }