たとえば、最初のノードの後にノードに十分なメモリを与えないという問題が発生しましたfirstNode = (node)malloc(sizeof(node))
。以下は、*nodeの構造と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を使用して挿入プロセスをテストした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を掛けない)を実行しても、2番目のインスタンスfirstN->rightでは機能しないことです。
それが正しい場合、なぜコードが十分なメモリを与えていないのだろうか。