Возникла проблема при инициализации динамического массива
Проблема возникает в строках:
int n;
int* arr = new int[n];
Изза того что n
не равна конкретному числу. Как исправить? Вроде нарушений доступа и синтаксиса нет. И почему данная проблема возникла?
Вот весь код:
class Base
{
virtual void Norma() = 0;
};
class Vector: public Base
{
private:
int n;
int* arr = new int[n];
public:
Vector(){}
~Vector(){}
void InputVector()
{
cout << "Input n:";
cin >> n;
for (int i = 0; i < n; i++)
{
//arr[i] = rand() % 10;
cin >> arr[i];
}
}
void Norma()
{
int max=arr[0];
for (int i = 0; i < n; i++)
{
if (arr[i] > max)
{
max = arr[i];
}
}
cout <<"Vector Norma is: "<<fabs(max);
}
void OutVector()
{
for (int i = 0; i < n; i++)
{
cout << arr[i] << " ";
}
}
};
int main()
{
Vector vec;
vec.InputVector();
vec.Norma();
vec.OutVector();
system("pause");
return 0;
}
Достаточно часто мне на SO попадается код вроде этого:
int n;
int* arr = new int[n];
Почему-то новичкам кажется, что new int[n]
магическим образом связывает n
с размером массива, так что потом, меняя n
, можно растягивать и сжимать массив. Это не так. После вызова new int[n]
размер массива остается фиксированным.
Так что нужно сначала получить n
, а только потом делать new
.
Решение: int* arr = new int[n];
заменить на просто int *arr;
, а после cin >> n;
поставить arr = new int[n];
.
Кроме того, обратите внимание: Из вашего класса как из решета течет память! В деструкторе не хватает delete []
, а также недостает копирующего конструктора и оператора присваивания.
Советую почитать: правило трех (the rule of three).
А чему равно Ваше n
при создании объекта, не пробовали вывести? Уверен там какой-то мусор. Логичнее задавать это число в конструкторе или инициализировать его после создания экземпляра класса. Вы же выделяете память под неопределённое число элементов, и только потом это число задаёте.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Нужно заполнить дек числами фибоначи при помощи алгоритма generate и лямбда функцииМожет кто подкинет идейку через анонимную лямбду?А то через...
Подскажите пожалуйста почему такая запись выдаёт ошибку"не найдена соответствующая функция begin, необходимая для этого основанного на диапазоне...
Подскажите есть ли правила хорошего тона или общепринятые соглашения по управлению динамической памятью в C++