Пытаюсь понять, как управлять памятью в C++ в стиле C:
struct aaa{
public:
int a ;
int b ;
std::string c ;
};
int asize =5;
int main()
{
aaa * a;
a = static_cast<aaa *>(malloc(sizeof(aaa) * asize));
for (int i;i<asize;i++)
{
a[i] = aaa(); //crash
}
a[0].c = "ddd";
a[1].c = "ccc";
a[2].c = "eee";
}
Сбой программы при создании объекта структуры в первом сегменте памяти. Что я делаю неправильно (кроме C в C++)?
malloc
. Не используйтеmalloc
, используйтеnew
. - person molbdnilo   schedule 23.01.2018std::malloc
не вызывает конструктор типа. Допустимо, если конструктор типа, который вы хотите создать, тривиален, а ваш — нет из-заc
. - person Rakete1111   schedule 23.01.2018for(...)
- person vico   schedule 23.01.2018aaa()
, а затем перемещаете-назначаете его наa[i]
. Правильный способ вызвать конструктор хранилища дляa[i]
— использоватьnew (&a[i]) aaa()
илиnew (a + i) aaa()
. - person jotik   schedule 23.01.2018new[]
для выделения массива - person pm100   schedule 23.01.2018But a[i] = new (a + i) aaa()
выдает ошибкуerror: no match for ‘operator=’ (operand types are ‘aaa’ and ‘aaa*’)
- person vico   schedule 24.01.2018new (a + i) aaa();
. Задание не нужно. Он просто создает объектaaa
по адресуa + i
. - person jotik   schedule 24.01.2018