我正在尝试制作适用于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
,以前从目标位置删除了所有数据,但这没有用,并且在向后投射void指针之后,我在访问位于指针内部的指针时遇到段错误。
此外,我尝试使用void指针指向结构本身(在代码中的数字3下),并且可以工作,但是我真的希望我的void指针(它们是数组的一部分)具有必要的内容,然后释放该部分不需要的内存。
P.s。我不需要的部分内存是代码中的connectionInfoStructToPutInHashTable
所指。就像包装指向其他结构的指针一样。