Проблема с динамическим массивом

Компилятор пишет мне такое предупреждение: Чтение недопустимых данных из "p":доступный для чтения объем равен 4 байт, однако считать можно только 8 байт.

И при выполнении программы если элементов массива больше
или равно 3-м, то программа в самом конце вызывает
исключения. Помогите пожалуйста.

#include<iomanip>
#include<string>
#include<windows.h>
#include<iostream>
#include<fstream>
#include<ctime>
using namespace std;
class Mass {
public:
    int p;
    Mass() {
        p = 0;
    }
    Mass(int _p) {
        p = _p;
    }
    friend istream& operator >>(istream& in, Mass& obj) {
        in >> obj.p;
        return in;
    }
    friend ostream& operator <<(ostream& out, Mass& obj) {
        out << obj.p;
        return out;
    }
};
class Sort {
public:
    Mass* p;
    int num;
    Mass* s;
    Sort() {
        p = 0;
        num = 0;
        s = 0;
    }
    void In(istream& in) {
        int i;
        in >> num;
        p = new Mass(num);
        for (i = 0; i < num; i++) {
            in >> p[i];
        }
    }
    void Out(ostream& out) {
        int i;
        out << "Выводится массив цифр:";
        for ( i = 0; i < num; i++) {
            out << endl << setw(2) << 1 + i << "." << p[i];
        }
    }
    ~Sort() {
        delete[]p;
        delete[]s;
    }
};

int main() {
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    Sort z;
    z.In(cin);
    z.Out(cout);
    system("pause");
    return 0;
}

Ответы (1 шт):

Автор решения: user7860670

В строке p = new Mass(num); создается один объект Mass, у которого вызывается конструктор с num, а не динамический массив из num объектов. Для создания num объектов следует использовать синтаксис p = new Mass [num]{};.

→ Ссылка