我遇到了一个问题,即在第一个节点之后,我没有为节点提供足够的内存,例如,firstNode = (node)malloc(sizeof(node))
. 下面是*node的结构和使用malloc函数的insert函数。
typedef struct treeNode *node;
struct treeNode {
node left;
node right;
int data;
};
node firstN;
node secondN;
node insert(int a, node t){
if(t==NULL){
t = (node)malloc(sizeof(node));
t->data = a;
t->left = NULL;
t->right = NULL;
} else {
if(a < t->data){
t->left = insert(a, t->left);
}else if(a > t->data){
t->right = insert(a, t->right);
}
}
return t;
}
这是我用malloc测试插入过程的main()(我没有使用上面定义的插入函数,因为我还在main中逐行测试)。
firstN=(node)malloc(sizeof(node)*10);
firstN->data=1;
firstN->right=NULL;
firstN->left=NULL;
firstN->right=(node)malloc(sizeof(node)*10);
对我来说有趣的是,虽然上述方法有效,但通常执行 (node)malloc(sizeof(node)) (没有乘以 10)对于第二个实例 firstN->right 不起作用。
我想知道为什么代码没有提供足够的内存,如果这是正确的情况。