Проблема в том, что вы выделили массив указателей, но вы никогда не выделяли ничего для самих указателей.
Это дает вам массив указателей:
a = new USR*[size];
Но вы никогдавыделил что-нибудь для каждого из указателей.
Поэтому здесь происходит сбой:
(*u).setName("test");
, поскольку *u
не инициализирован.
Существует два способачтобы исправить это:
- Выделите (и инициализируйте) что-нибудь для каждого
USR
указателя. - Не используйте двойные указатели.Просто используйте простой массив из
USR
объектов.
Я бы предпочел последнее, поскольку то, что у вас, вероятно, более сложное, чем должно быть.
Что-то вроде этого будетвероятно, делай, что хочешь:
class A{
private:
USR *a;
public:
A(int size){
a = new USR[size];
}
USR* getUser(){
return &a[0];
}
};
Не забывай, что тебе понадобится и деструктор.