My code compiles successfully, but when I try to run it, I keep getting this error: * Error in `./a.out': corrupted double-linked list: 0x00000000021c1280 * Aborted
This is my VectorDouble.cpp file
#include<bits/stdc++.h> 
#include <cstring>
#include "VectorDouble.h"
#include <iostream>
using namespace std;
VectorDouble::VectorDouble() {
    cout<<"constructor called"<<endl;
    max_count = 50;
    arr = new double[this->max_count];
    count = 0;
}
VectorDouble::VectorDouble(int max_count_arg) {
    max_count = max_count_arg;
    arr = new double[max_count_arg];
    count = 0;
}
VectorDouble::VectorDouble(const VectorDouble& copy) {
    max_count = copy.max_count;
    arr = new double[this->max_count];
    count = copy.count;
}
VectorDouble::~VectorDouble() {
    delete []arr;
}
VectorDouble VectorDouble::operator =(VectorDouble& copy) {
    VectorDouble temp(copy.max_count);
    for(int i =0; i<=this->count;i++){
        temp.arr[i]=copy.arr[i];
    }
    return temp;
}
bool VectorDouble::operator ==(VectorDouble b) const {
    bool isEqual = true;
    if(this->count == b.count){
        for(int i = 0; i<=this->count; i++){
            if(this->arr[i] == b.arr[i]){
                isEqual= true;
            }
            else{
                return false;
            }
        }
    }
    return isEqual;
}
void VectorDouble::push_back(double num) {
    if(this->count+1>this->max_count){
        this->max_count *= 2;
        VectorDouble temp(2*(this->max_count));
        for(int i = 0; i<this->max_count; i++){
            temp.arr[i]=this->arr[i+1];
        }
        temp.arr[count+1] = num;
    }
    else{
        this->arr[count+1]=num;
        this->count++;
    }
}
int VectorDouble::capacity() {
    return this->max_count;
}
int VectorDouble::size() {
    return this->count;
}
void VectorDouble::resize(unsigned int size, double defaultVal) {
    if(size>(this->count)){
        for(int i = this->count; i<size; i++){
            this->arr[i] = defaultVal;
        }
        this->count=size;
    }
    else{
        for(int i = size; i < this->count; i++){
            this->arr[i] ='\0';
        }
        this->count=size;
    }
}
void VectorDouble::reserve(unsigned int size) {
    if(size>(this->max_count)){
        this->max_count = size;
    }
}
double VectorDouble::value_at(unsigned int i) {
    if(i>(this->count)){
        throw std::logic_error("out of bounds");
    }
    return this->arr[i];
}
void VectorDouble::change_value_at(double newValue, unsigned int i) {
    if(i>(this->count)){
        throw std::logic_error("out of bounds");
    }
    this->arr[i]=newValue;
}
ostream& operator<<(ostream& os, const VectorDouble &vd)
{
  for(int i = 0; i < vd.count; i++){
    os << vd.arr[i] << " ";
  }
  return os;
}
This is my VectorDouble.h file
#ifndef DYNAMICARRAY_H
#define DYNAMICARRAY_H
#include <iostream>
using namespace std;
class VectorDouble {
    public:
      int max_count;
      int count;
      double* arr;
    public:
      VectorDouble();
      VectorDouble(int max_count_arg);
      VectorDouble(const VectorDouble& copy);
      ~VectorDouble();
      VectorDouble operator =(VectorDouble& copy);
      bool operator ==(VectorDouble b) const;
      void push_back(double num);
      int capacity();
      int size();
      void reserve(unsigned int size);
      void resize(unsigned size, double defaultVal = 0.0);
      double value_at(unsigned int i);
      void change_value_at(double newValue, unsigned int i);
      friend ostream& operator<<(ostream& os, const VectorDouble &vd);
      // DO NOT CHANGE THE FOLLOWING LINE OF CODE. It is for the testing framework
      // DO NOT IMPLEMENT THE FOLLOWING FUNCTION. It is implemented by the testing framework
      friend int reserved_driver_main();
};
#endif
This is my main.cpp file
#include <iostream>
#include "VectorDouble.h"
using namespace std;
int user_main() {
     // test 1, verify that default constructor initializes max_count
  VectorDouble v;
  if (v.max_count == 50)
  {
    std::cout << "1.1. default constructor: max_count = 50; test passed" << std::endl;
  }
  else
  {
    std::cout << "1.1. default constructor: max_count != 50; test failed" << std::endl;
  }
    return 0;
}
