Проблема с динамическим массивом
Компилятор пишет мне такое предупреждение: Чтение недопустимых данных из "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]{};.