,我想出了一个问题,在这里我就不给我的节点给予足够的内存后,第一个,当我做,例如,firstNode = (node)malloc(sizeof(node))
给予足够的内存。 以下是使用malloc函数的* node和insert函数的结构。二叉搜索树的malloc不是为以下节点
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插入过程(I没有使用以上所定义的插入功能,因为我仍然在主测试逐行)()。
firstN=(node)malloc(sizeof(node)*10);
firstN->data=1;
firstN->right=NULL;
firstN->left=NULL;
firstN->right=(node)malloc(sizeof(node)*10);
对我来说有趣的是,虽然上述工作,只是正常做(节点)的malloc(的sizeof(节点))(不含10乘法)不二审工作,firstN->右。
我不知道为什么代码没有给予足够的内存,如果这是正确的情况下。
哇哦,它看起来这样的方式更简单。非常感谢。但如果你不介意的话,这是一个后续问题。为什么我们不能做malloc(sizeof * node)呢?我试过了,但没有奏效。此外,我只是尝试编译没有铸造,它会工作不幸,说void *不是类型节点.. :( – meany
@meany如果编译器抱怨丢失的转换,你编译为C++而不是C你不能写'malloc(sizeof * node)',因为'node'是一个类型,而不是你可以解引用的指针(尽管'malloc(sizeof * n)'中的指针'n'不被解引用',其中的表达式'* n'只用于确定类型,以及所需的大小) –
如果没有转换就不编译,那么你不使用C编译器,而且你不能做'sizeof * node'是因为'* node'不是一个有效的表达式,因为'node'是一个类型,而不是一个值。 – melpomene