C取消引用结构中的整数指针

C取消引用结构中的整数指针,c,C,我在正确地解引用指向驻留在结构数组中的整数的指针时遇到问题。守则的有关部分包括: typedef struct hf_register_info { int *p_id; /**< written to by register() function */ header_field_info hfinfo; /**< the field info to be registered */ } hf_register_info; . .

我在正确地解引用指向驻留在结构数组中的整数的指针时遇到问题。守则的有关部分包括:

typedef struct hf_register_info {
  int                   *p_id;  /**< written to by register() function */
  header_field_info     hfinfo; /**< the field info to be registered */
} hf_register_info;
.
.
hf_register_info hf[MAX_HF_COUNT];
.
.
*(hf[i].p_id) = -1;
typedef结构高频寄存器信息{
int*p_id;/**<由register()函数写入*/
header\u field\u info hfinfo;/**<要注册的字段信息*/
}高频寄存器信息;
.
.
高频寄存器信息高频[最大高频计数];
.
.
*(hf[i].p_id)=-1;
上面代码的最后一行导致异常。我如何正确地遵守p_id


感谢并问候…Paul

您需要初始化指针。在初始化数组时,结构中的指针没有指向任何对象

因此,对于数组中要取消引用指针并为其赋值的每个结构,首先需要在内存中分配空间

hf_register_info hf[MAX_HF_COUNT];

// some code here

hf[i].p_id = malloc(sizeof(int)); // or unsigned long or whatever
*(hf[i].p_id) = -1;

是的,语法是正确的,你也可以删除偏执。
p_id
指向哪里?指针实际指向任何有效的地方吗?否则,取消对指针的引用将导致未定义的行为。为什么假设这些是代码中唯一相关的部分?我的意思是,如果你已经知道问题是什么,为什么要在这里询问?使用调试器检查p_id是否有一个指向存储int的位置的有效值。我猜你不是说
int*
,你真的想要
int
如果你初始化它,为什么需要一个指针?您应该首先初始化指向某个int变量地址的指针。