Объявление и инициализация структур

Как правильно обратиться к структуре блока? Как видите, элемент структуры Block содержит структуру Record cells,их должно быть 5, т.е. 5 таких Record в одном блоке. Тут я не совсем понимаю, правильно ли я их инициализировал.

#include <stdlib.h>
#include <list>
#include <vector>
#include <iostream>
using namespace std;

struct Record // записи в блоках
{
    float key; //ключ
    int* intData; //должен быть массивом
    char* charData; // должен быть массивом
    float floatData; //инфа
};
struct Block // структура блоков
{
    int cnt;        // текущий блок
    Record cells[5];   // элементы блока
    Block* prev;    // указатель на предыдущий блок
    Block* next;    // указатель на следующий блок
};

int main() 
{
    //const int M = 5; //размер блока
    list<vector<Block>> listOfVectors; // объявляем лист векторов
    Block BlockContent1;              // Содержимое блока
    Record RecordContent1;
    BlockContent1.cells =
    {
                                    {4, {1,32}, {'C','B'}, 4.5},
                                    {2, {33}, {'D','C'}, 3.4}
    };

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

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

Ну, поскольку у вас размер массива плавающий, я бы использовал вектора. И, понятно, инициализацию, а не присваивание.

Примерно так:

struct Record // записи в блоках
{
    float key; //ключ
    vector<int>  intData; //должен быть массивом
    vector<char> charData; // должен быть массивом
    float floatData; //инфа
};
struct Block // структура блоков
{
    int cnt;        // текущий блок
    Record cells[5];   // элементы блока
    Block* prev = nullptr;    // указатель на предыдущий блок
    Block* next = nullptr;    // указатель на следующий блок
};

int main() 
{
    //const int M = 5; //размер блока
    list<vector<Block>> listOfVectors; // объявляем лист векторов
    Block BlockContent1 { 2,
        {
            {4, {1,32}, {'C','B'}, 4.5f},
            {2, {33}, {'D','C'}, 3.4f}
        }
    };
    // Содержимое блока
    Record RecordContent1;
}
→ Ссылка
Автор решения: DmitryK

Поскольку размерность массивов известна, то сразу объявлять массивы внутри структуры Record

struct Record // записи в блоках
{
    float key; //ключ
    int intData[2]; //должен быть массивом
    char charData[2]; // должен быть массивом
    float floatData; //инфа
};

Утечки памяти не будет. Утечка памяти будет если вы сами выделили память, а потом не освободили её.
И в таком варианте ваша инициализация должна работать. Вот в такой версии точно работает:

~~~
BlockContent1.cells[0] = {4, {1,32}, {'C','B'}, 4.5};
~~~
→ Ссылка