В устаревшей программе, над которой я работаю, есть несколько структур для связанных списков:
typedef struct Unit_Cell
{
short Type ;
char Name[x] ;
short X ;
short Y ;
struct Unit_Cell *Next;
} Unit_Cell ;
typedef struct
{
Unit_Cell *Start;
Unit_Cell *Current;
} List_Cell;
У меня есть указатель на структуру List_Cell, которая содержит все ячейки.
List_Cell *FullList; # malloc'ed, with added elements etc etc
Для новой разработки мне необходимо связать подмножество этого полного списка с новыми структурами, которые выглядят следующим образом: (упрощенно)
typedef struct Unit_NewElement
{
char Name[y];
int Value;
List_Cell *ListCells;
struct Unit_NewElement *Next;
} Unit_NewElement;
typedef struct
{
Unit_NewElement *Start;
Unit_NewElement *Current;
} List_Cell;
Создание нового элемента в виде:
Unit_NewElement *NewElement; # malloc'ed, with added elements etc etc ...
# EXCEPT LIST CELLS !
Зацикливаясь на полном списке ячеек, я делаю расчеты, чтобы узнать, должна ли ячейка Current быть связана с моей структурой элементов.
В основном , мы бы сделали что-то вроде:
# Keeping the last element
Unit_Cell *Temp = NewElement->ListCells->Current;
# Replacing last element
NewElement->ListCells->Current = FullList->Current;
# Setting temp element (which is now our previous), next pointer to the new current
Temp->Next = NewElement->ListCells->Current;
Но, делая это, я буквально ломаю исходный список "FullList". Что мне не нужно.
Мне нужно иметь возможность добавлять ячейки из полного списка для каждого нужного мне нового элемента, без влияния на сам полный список.
Memcpy - это путь к go?
memcpy(Element->ListCells->Current, FullList->Current, sizeof(Unit_Cell));
Как справиться с тем фактом, что в копируемой структуре также есть указатель?
А как насчет прямое копирование данных без memcpy:
*Element->ListCells->Current = *FullList->Current;
Спасибо