タイトル通りなのですが普通に実行してコンソール画面が表示されエンターキーで閉じると 
場所や行数が表示されず「読み取りアクセス違反が発生しました」と表示され困っています教えてくれますでしょうか?
1,ソースが利用できませんとは何が言いたのでしょうか?
2,初学者のため何がどう違うのか検討がついません。教えてくれますでしょうか?
環境:visual studio 2017, OS : windows10

画像の説明をここに入力

     ///////////////int main()部/////////////////////
        #include <iostream>
        #include "conio.h"
        #include "Header.h"
        using namespace std;

        int main() {

            C x(4,"AAA");
            D y(5,"B",5,"BB");

            y = x;

            //cout << a;
            y.view();



            _getch();
            return 0;
        }

    ///////////////Header.h////////////////////

            #ifndef ___Header_h
            #define ___Header_H
            #include <string>
            using namespace std;


            class C {
            private:
            protected:
                int *vec;
                string name;
                int num;
            public:
                C(int n, string str);//コンストラクタ

                void view()const;/*画面表示*/

                C(const C& x);/*コピーコンストラクタ*/
                C& operator = (const C& x);/*代入operator*/

                int g_num()const { return num; }
                string g_name()const { return name; }

                int g_vec(int i)const
                {
                    return vec[i];
                }

            };

            class D : public C {
            private:
            protected:
                int *dvec;
                string dname;
                int dnum;
            public:
                D(int n, string str,int nn,string sstr);//コンストラクタ

                void view()const;//画面表示

                D& operator = (const D& x);//代入operator

                D& operator = (const C& x);//代入operator D = C

            };





            #endif


//////////Source.cpp部/////////////////////////

        #include "Header.h"
        #include <iostream>
        using namespace std;


        C::C(int n, string str):num(n),name(str),vec(new int[n])
        {
            for (int i = 0; i < num; i++)
            {
                vec[i] = i;
            }
        }

        void C::view()const
        {
            cout << "class C"<<"\n";
            cout << "name: " << name<<"\n";
            for (int i = 0; i < num; i++)
            {
                cout << "["<<i<<"]: "<< vec[i] << "\n";
            }

            cout << "\n\n";
        }

        C::C(const C& x)/*コピーコンストラクタ*/
        {
            if (this == &x)
            {
                num = 0;
                vec = NULL;

            }
            else {
                if (num != x.num)
                {
                    num = x.num;
                    delete[] vec;
                    vec = new int[num];
                    name = x.name;
                }
                for (int i = 0; i < num; i++)
                {
                    vec[i] = x.vec[i];
                }
            }
        }

        C& C::operator = (const C& x)/*代入operator*/
        {
            if (this != &x)
            {
                if (num != x.num)
                {
                    num = x.num;
                    delete[] vec;
                    vec = new int[num];
                    name = x.name;
                }
                for (int i = 0; i < num; i++)
                {
                    vec[i] = x.vec[i];
                }
            }
            return *this;
        }


        /*--------------------派生クラス*/
        D::D(int n, string str,int nn,string sstr) : dnum(n),dname(str),dvec(new int[dnum]),
                                                                                        C(nn,sstr)
        {
            for (int i = 0; i < dnum; i++)
            {
                dvec[i] = i;
            }
        }

        void D::view()const
        {
            //cout << dnum;

            cout << "class D" << "\n";
            cout << "name: " << dname << "\n";
            for (int i = 0; i < dnum; i++)
            {
                cout << "[" << i << "]: " << dvec[i] << "\n";
            }

            cout << "\n\n";

            cout << "class C" << "\n";
            cout << "name: " << C::name << "\n";
            for (int i = 0; i < C::num; i++)
            {
                cout << "[" << i << "]: " << C::vec[i] << "\n";
            }

        }

        D& D::operator = (const D& x)/*代入operator*/
        {
            if (this != &x)
            {
                if (dnum != x.dnum)
                {
                    dnum = x.dnum;
                    delete[] vec;
                    vec = new int[dnum];
                    dname = x.name;
                }

                for (int i = 0; i < dnum; i++)
                {
                    vec[i] = x.vec[i];
                }
            }
            return *this;
        }

        D& D::operator = (const C& x)//代入operator D = C
        {
            if (this != &x)
            {
                cout << "代入operator D = C\n";
                C::num = x.g_num();
                C::name = x.g_name();
                delete[] C::vec;
                C::vec = new int[C::num];

            }
            for (int i = 0; i < C::num; i++)
            {
                C::vec[i] = x.g_vec(i);
                //cout << C::vec[i]<<"\n";
            }

            return *this;
        }