首页 > 解决方案 > 如何让 void 指针具有与结构指针相同的内容?

问题描述

我正在尝试制作一个与 void 指针一起使用的哈希表的抽象版本。而且我无法让我的指针包含指向其他结构的值。

我尝试使用将指针复制到其他结构,memcpy但不知何故,这不起作用,当我尝试使用从已经强制转换到所需结构的指针访问其他结构时,我收到了一个 void 指针,我收到了段错误。

值得注意的是,calloc考虑到要放入其中的内容的大小,我会记住 void 指针。

void *connectionInfoStructToPutInHashTable = commonHashTableArguments->connectionInfoStruct;
void *existingElementPointer = localSearchForExistingElement(commonHashTableArguments);
if(existingElementPointer == NULL){
    return;
}
int connectionInfoStructSize = commonHashTableArguments->connectionInfoStructSize;
  1. memset(existingElementPointer, 0, connectionInfoStructSize);

    memcpy(existingElementPointer, connectionInfoStructUpdated, connectionInfoStructSize);
    
  2. (*((int *)existingElementPointer)) = (*((int*)connectionInfoStructUpdated));

  3. *(void**)existingElementPointer = connectionInfoStructUpdated;

我曾尝试使用memcpy, 之前从目标位置擦除所有数据,但这不起作用,并且在将 void 指针转换回来后,我在访问转换指针内的指针时遇到了段错误。

另外,我尝试使用 void 指针指向结构本身(在代码中的编号 3 下)并且它有效,但我真的希望我的 void 指针是数组的一部分,它们具有必要的然后释放那部分内存我不需要。

我不需要的内存部分是connectionInfoStructToPutInHashTable代码中所指的。就像指向其他结构的指针的包装器一样。

标签: c

解决方案


推荐阅读