你的 Stack<type> stack2 = stack; 调用
- Stack(const Stack &stack) {
- *this = stack;
- }
复制代码
随后调用
- Stack &operator=(const Stack &stack) {
- if (this == &stack) {
- return *this;
- }
- length = stack.length;
- sp = stack.sp;
- delete[] data; // vc++6.0编译器报错,gcc竟然能过。这里如何改?
- data = new T[length];
- for (unsigned int i = 0; i < sp; i++) {
- data[i] = stack.data[i];
- }
- return *this;
- }
复制代码
但是事实上,T * data只是被定义了而已,但是并没有初始化,这时候delete[] data;就等于对野指针指向的空间删除,原则上一定会报错的.至于解决这个问题,可以在拷贝构造函数中添加 data=0;
即为:
- Stack(const Stack &stack) {
- *this.data=0;
- *this = stack;
- }
复制代码