1
我昨天花了幾個小時在我的程序中找到一個錯誤。我可以將其分解爲以下內容。代碼沒有多大意義。但問題是,如果我在功能fillTree離開了線C程序奇怪的行爲 - 指針和內存
BST root2 = (BST) malloc(sizeof(BST));
()的程序在做什麼它應該。但是取消註釋會導致效果:fillTree()中BST root3的數據字段從NULL更改爲不同。 但我不明白爲什麼會發生這種情況。
所以註釋掉我得到以下輸出:
root3->data is still null!
但它應該是(行註釋):
root3->data is still null!
root3->data is still null!
root3->data is still null!
root3->data is still null!
請幫幫我!
非常感謝!
#include <stdio.h>
#include <stdlib.h>
typedef struct BSTTag{
struct BSTTag* lNode;
struct BSTTag* rNode;
void *data;
int (*compare)(void*, void*);
} *BST;
BST createTree(BST root) {
if(root == NULL) {
BST bst = (BST) malloc(sizeof(BST));
bst->lNode = NULL;
bst->rNode = NULL;
bst->data = NULL;
return bst;
}
return root;
}
BST fillTree(BST root, int n) {
int i;
BST root3 = NULL;
// error occurrs if this line is not commented
//BST root2 = (BST) malloc(sizeof(BST));
for(i = n; i > 0; i--) {
int *rd = (int *)malloc(sizeof(int));
*rd = i;
if(i == n) {
root3 = createTree(NULL);
}
if(root3->data == NULL) {
printf("root3->data is still null!\n");
}
}
return root;
}
int main(void) {
fillTree(NULL, 4);
}
,那麼你想要的malloc(的sizeof(BSTTag)) –
非常感謝你。它現在正在工作:) – user2221323
另一種'typedef'指針被認爲是有害的'恕我直言。 – wildplasser