Я пытаюсь создать абстрактную версию хеш-таблицы, которая работает с указателями void. И я не могу заставить мои указатели содержать значения, которые указывали бы на другие структуры.
Я пытался скопировать указатели на другие структуры, используя memcpy
, но почему-то это не сработало, и когда я попытался получить доступ к другим структурам с указателями из уже приведенной к необходимой структуре пустого указателя, я получил сег неисправность.
Стоит отметить, что у меня calloc
память для пустых указателей, учитывая размер содержимого, которое я хочу поместить туда.
void *connectionInfoStructToPutInHashTable = commonHashTableArguments->connectionInfoStruct;
void *existingElementPointer = localSearchForExistingElement(commonHashTableArguments);
if(existingElementPointer == NULL){
return;
}
int connectionInfoStructSize = commonHashTableArguments->connectionInfoStructSize;
memset(existingElementPointer, 0, connectionInfoStructSize);
memcpy(existingElementPointer, connectionInfoStructUpdated, connectionInfoStructSize);
(*((int *)existingElementPointer)) = (*((int*)connectionInfoStructUpdated));
*(void**)existingElementPointer = connectionInfoStructUpdated;
Я пытался использовать memcpy
, ранее стирая все данные с места назначения, но это не сработало, и после приведения пустого указателя обратно я получил ошибку сегмента, получая доступ к указателям внутри указателя приведения.
Кроме того, я пытался указывать пустые указатели на указание на саму структуру (под номером 3 в коде), и она работала, но мне бы очень хотелось, чтобы мои указатели пустоты, являющиеся частью массива, имели необходимые, а затем освобождали эти части. памяти, которая мне не нужна.
P.s. части памяти, которые мне не нужны, это то, на что ссылается connectionInfoStructToPutInHashTable
в коде. Как обертка для указателей на другие структуры.