我正在通过TCP向客户端应用程序发送一个dirtree。迪尔节点是看起来像这样的结构:通过TCP发送序列化目录树
struct node {
char *name;
int count_subnodes;
struct node **subnodes;
};
要序列:
void serialize(void *buffer, struct node *n, int *c){
int i;
if(!n)
return;
memcpy(buffer+(*c), n, sizeof(*n));
*c+=sizeof(n);
for(i = 0; i < n->count_subnodes; i++){
serialize(buffer, n->subnode[i], c);
}
}
我在做什么错?当我为子节点递归调用序列化时,它会发生段错误。另外,我是否需要任何种类的标记来划定界限,以便我可以在客户端重新构建树?
编辑:c是保持缓冲区当前位置的计数。
编辑2:错字。它是sizeof(* n)而不是c。对不起
也许你的缓冲区太小?很难说不知道有关实际树或缓冲区的任何信息。 –
我给了测试的大内存。我做了'buffer = calloc(600,1)'这对我的例子来说足够大。你看到任何执行问题? – Neo