【问题标题】:Setting a void pointer's value to an integer将 void 指针的值设置为整数
【发布时间】:2015-01-09 04:49:08
【问题描述】:

假设您有一个节点struct,其属性为void* data

是否可以将此指针的值设置为任意整数值(即,而不是像node->data = &random_integer 这样的操作)。

我尝试以下几行:

NodePtr node = malloc(sizeof(Node));
*((int*)(node->data)) = 0;

编译时没有错误和警告,但会导致段错误。我不太清楚为什么。

我可以轻松地将 void 指针设置为某个 &int,但随后我必须为 &int 分配空间……对于如此简单的操作来说,这似乎是不必要的。

【问题讨论】:

  • 你确定node->data已经初始化了吗?
  • @BlagovestBuyukliev 我确定不是。
  • 您忘记将内存分配给node->data。即:node->data = malloc(sizeof(int));
  • @BlagovestBuyukliev 这是操作节点->数据的第一行代码,但这不是初始化值吗?另外关于分配注释,不是 node->data 已经在 malloc() 声明中分配了吗?即,node->data 指向分配的内存。
  • malloc 只是为您的 Node 结构分配足够的空间。初始化结构中包含的任何指针不是malloc 的工作。

标签: c segmentation-fault void-pointers


【解决方案1】:
*(node->data)

这意味着您正在尝试从 node->data 指向的内存位置读取。 在您的代码中,我们没有看到 node->data 被指向任何内存位置。 首先使用 malloc 为 node->data 提供一些内存。

node->data = malloc(sizeof(int));

然后尝试访问或写入该值。

*((int *)(node->data)) = 1; /* or any value */

【讨论】:

  • 您不能直接取消引用 void * 指针。中间的 int * 演员应该仍然存在。
  • 嗯,我想我明白了,现在。即使 int 指针有空间,它仍然需要为实际整数分配空间。谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-01-19
  • 2013-01-19
  • 1970-01-01
  • 2014-05-13
  • 2021-07-22
  • 2017-02-12
  • 2012-11-21
相关资源
最近更新 更多