我的功能如下:
void insert(btnode **ptr, char *name, unsigned int race, unsigned int class, unsigned int id, char *guild)
{
if((*ptr) == NULL)
{
(*ptr) = (btnode*)malloc(sizeof(btnode));
(*ptr)->rec = (record*)malloc(sizeof(record));
(*ptr)->left=NULL;
(*ptr)->right=NULL;
strcpy((*ptr)->rec->name,name);
(*ptr)->rec->race = race;
(*ptr)->rec->class = class;
(*ptr)->rec->id = id;
strcpy((*ptr)->rec->guild, guild);
}
else
{
if((*ptr)->rec->id > id)
{
insert(&((*ptr)->left),name,race,class,id,guild);
}
else
{
insert(&((*ptr)->right),name,race,class,id,guild);
}
}
}
用于将值插入二叉树
我遇到的问题是当第一个节点为空时一切正常。但是,当函数必须调用其自身时,字符数组不会打印其含义。
有什么建议可以解决这个问题吗?
编辑:添加了完整代码,仅使用未签名的整数字符没有问题。
结构减速度:
#define TWOBYTEINT 16
#define FOURBYTEINT 32
#define MAXIMUMLINE 70
#define FALSE 0
#define TRUE 1
typedef struct record
{
char name[13];
unsigned int race : TWOBYTEINT;
unsigned int class : TWOBYTEINT;
unsigned int id : FOURBYTEINT;
char guild[30];
}__attribute__((packed)) record;
typedef struct node
{
record * rec;
struct node *right, *left;
}btnode;
最佳答案
strcpy 看起来非常狡猾 - 它们看起来正在复制到 (*ptr)->rec 结构中未初始化内存所指向的未分配内存。
令人惊讶的是您的代码没有崩溃。
关于C递归函数传递char数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9904505/