首页 > 解决方案 > 试图为结构中的 void 指针赋值

问题描述

我有一个这样定义的结构:

typedef struct foo {
    void *bar;
    int memory;
}

我正在尝试为 void-pointer 分配一个值,如下所示:

int *mem = (int *)proc->memory;
proc->bar = mem;

但是,第二行给出了分段错误。为什么?我以为我知道如何使用指针,但我不知道。

赋值后,mem 指针包含 proc->memory 的地址。但是当我尝试将 void *bar 分配给该地址时,它会显示分段错误。

我尝试了很多东西,在任何地方引入 & 和指针转换,我不知道我在做什么。

标签: cpointersstructvoid-pointers

解决方案


如果你想要一个指针,你需要获取 int 的地址。

int *mem = &(proc->memory);

您正在创建一个指向 int 值的指针——这可能指向受保护的内存,而不是我们进程空间内的东西。


如果要“制作副本”,则需要分配空间

int *mem = malloc(sizeof(int));

*mem = proc->memory;

这一切都应该在 C 中指针的简单介绍中涵盖。

例如http://www.ontko.com/pub/rayo/cs35/pointers.html

您还可以在 C 中搜索 malloc 或动态内存分配。


推荐阅读