[英]Accessing members in a pointer to a pointer of a 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不会不需要...
no野 感谢您的帮助:)
问题是您尚未分配要分配给的setElement
。 在代码的主要部分中,您将创建一个Set
,它只是一个指向setElement
的指针。 此指针永远不会设置为指向任何明智的指针。 即您需要类似的东西
Set a = malloc(sizeof(setElement));
las,尚不清楚您的变量的确切定义位置。 我认为你的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.
}
正如@amaurea所提到的,您需要在setElement结构中使用malloc()。 除此之外,您还需要对setElement结构的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
内容的第二个参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.