int main関数の部の例外処理のここですと書いてある部分なのですが、thisを返してもなぜ不定値?(初期化してない?) コンソール画面で[添え字範囲エラー52570]と謎の数値が出てします。
なぜなのでしょうか?、コメント部のしてあるソースの部分も同じの謎の数値が出てしまいます。

Array.h

// 配列クラステンプレートArray
#ifndef ___ClassTemplate_Array
#define ___ClassTemplate_Array

//===== 配列クラステンプレート =====//
template <class Type> class Array {
    int nelem;      // 配列の要素数
    Type* vec;      // 先頭要素へのポインタ

    //--- 添字の妥当性を判定 ---//
    bool is_valid_index(int idx) { return idx >= 0 && idx < nelem; }

public:

    //----- 添字範囲エラー -----//
    class IdxRngErr {
        const Array<Type>* ident;
        int idx;
    public:
        IdxRngErr(const Array<Type>* p, int i) : ident(p), idx(i) { }
        int Index() const { return idx; }///////////////ここです。

        const Array<Type>* aIdent() { return ident; }
    };

    //--- 明示的コンストラクタ ---//
    explicit Array(int size, const Type& v = Type()) : nelem(size) {
        vec = new Type[nelem];
        for (int i = 0; i < nelem; i++)
            vec[i] = v;
    }

    //--- コピーコンストラクタ ---//
    Array(const Array<Type>& x) {
        if (&x == this) {                       // 初期化子が自分自身であれば…
            nelem = 0;
            vec = NULL;
        }
        else {
            nelem = x.nelem;                    // 要素数をxと同じにする
            vec = new Type[nelem];              // 配列本体を確保
            for (int i = 0; i < nelem; i++)     // 全要素をコピー
                vec[i] = x.vec[i];
        }
    }

    //--- デストラクタ ---//
    ~Array() { delete[] vec; }

    //--- 要素数を返す ---//
    int size() const { return nelem; }

    //--- 代入演算子= ---//
    Array& operator=(const Array<Type>& x) {
    //
        std::cout << "代入演算子\n";
        if (&x != this) {                   // 代入元が自分自身でなければ…
            if (nelem != x.nelem) {         // 代入前後の要素数が異なれば…
                delete[] vec;               // もともと確保していた領域を解放
                nelem = x.nelem;            // 新しい要素数
                vec = new Type[nelem];      // 新たに領域を確保
            }
            for (int i = 0; i < nelem; i++) // 全要素をコピー
                vec[i] = x.vec[i];
        }
        return *this;
    }

    //--- 添字演算子[] ---//
    Type& operator[](int i) {
        if (!is_valid_index(i))
            throw IdxRngErr(this, i);               // 添字範囲エラー送出
        return vec[i];
    }

    //--- const版添字演算子[] ---//
    const Type& operator[](int i) const {
        if (!is_valid_index(i))
            throw IdxRngErr(this, i);               // 添字範囲エラー送出
        return vec[i];
    }

};

#endif

int main()関数部

int main() {
    Array<int> x(5);
    Array<double> y(4);
    cout <<"添え字数int "<< x.size()<<'\n';
    cout << "添え字数double " << y.size() << '\n';

    while (1) {
        int t = 0;
        int n = 0;
        double d = 0.0;

        cout << "添え字を入力:"; 
        cin >> n;

        try {
            int i = 0;
            for (i = 0; i < n; i++) {
                x[i] = i;
            //  y[i] = d;
            }
        } catch (Array<int>::IdxRngErr& x) {
            Array<int> const *ptr = x.aIdent();

            //ここです↓/////////////////////////////////////////////////
            cout << "int 要素数範囲エラー" << ptr->size() << '\n\n';
            //cout << "int 要素数範囲エラー" << x.Index() << '\n\n';

            //cout<<"要素数範囲エラー"<< y.Index()<<'\n';
            //continue;
        } catch (Array<double>::IdxRngErr& x) {
            //t = 0;
            cout << "double 要素数範囲エラー" << x.Index() << '\n\n';
            continue;
        }
        cout << "\n\n\n";
        //t = 0;
    }

    _getch();
    return 0;
}