Объявление и инициализация структур
Как правильно обратиться к структуре блока? Как видите, элемент структуры 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};
~~~