通常制作结构的副本就像使用=运算符一样简单,编译器会生成代码来为您复制结构。但是,对于这一部分,函数必须返回一个指向结构的指针,所以我一直在使用它只是为了达到一个部分,我意识到我尝试的一切都没有正确地复制结构。
我的问题的基本示例是
typedef struct command_stream *command_stream_t;
command_stream_t ty = (command_stream_t) malloc(sizeof(struct command_stream));
command_stream_t yy;
do some code
//ty contains a variable words which is an array of strings
*yy = *ty;
ty->words = NULL; //set to null to see if yy still contains a copy of the struct
printf("%s", yy->words[0]);
我在这里遇到了分段错误。但是,如果我改变它,那么它不是指针
typedef struct command_stream command_stream_t
yy=ty;
ty.words = NULL;
printf("%s", yy.words[0]);
这很好用!我不完全确定我应该如何为指针做同样的事情,我真的不想回去改变500多行代码......
答案 0 :(得分:3)
您的yy
指针永远不会被初始化。
你应该在那里分配足够的内存来保存结构,然后像你一样使用*进行复制,或者使用带有指针和大小的memcpy
。
答案 1 :(得分:0)
你尝试过这样的事吗?
struct command_stream* ty = (struct command_stream*) malloc(sizeof(struct command_stream));
/* do things with the struct */
struct command_stream ty_val = *ty;
struct command_stream yy = ty_val;