在指向结构指针的指针中访问成员

时间:2012-10-30 18:51:18

标签: c pointers struct

代码如下:

/* set.h */
struct setElement{
  char *element;
  setElement *next;
};

typedef struct setElement *Set;  //Set is now the equivalent of setElement*

Set a;    

setInit(&a);

/* setInit function declaration @ setInit.c */

int setInit(Set *a){
  (*a)->element = "asdf";  //results in a seg fault
}

尝试malloc'a'有效,但如果我尝试访问集合中的任何成员'a'不起作用。我理解我将set()的引用从main()函数传递给setInit,所以我相信setInit中包含的指针正在寻址main()函数中'Set a'分配的内存,所以malloc会不会'是必需的......

Iunno。感谢帮助:)

3 个答案:

答案 0 :(得分:4)

问题是您尚未分配您要分配的setElement。在代码的主要部分中,您创建了一个Set,它只是指向setElement的指针。永远不会将此指针设置为指向任何合理的指针。即你需要像

这样的东西
Set a = malloc(sizeof(setElement));

答案 1 :(得分:1)

唉,目前还不清楚你的变量究竟在哪里定义。我假设您的main.c类似于

#include "set.h"

Set a;    

int main()
{
    setInit(&a);
}

如果是这样,你的a,它本身就是一个指针,应该指向某个地方。

如果您的框架需要malloc() ed数据,则应该

int main()
{
    a = malloc(sizeof(*a)); // *a is a struct setElement now, with 2 pointer-sized members.
    setInit(&a); // Now seInit should be able to operate on the struct as wanted.
}

答案 2 :(得分:0)

正如@amaurea所提到的,你需要为你的setElement结构使用malloc()。除此之外,您还需要为setElement struct的element成员执行相同的操作。 char*只是指向char或char数组的指针,不会隐式分配任何内容。

int setInit(Set *a){
  (*a)->element = "asdf";  //results in a seg fault
}

可以重写

int setInit(Set *a){
  (*a)->element = malloc(sizeof("asdf"));
  strcpy((*a)->element,"asdf");
}

可以重写上述内容以获取实际element内容的第二个参数。