我的项目的想法是在重复实验上建立一个概率树,其中包含几种可能的结果。
这是一个非常简单的项目,我认为我做对了。它是一个基本的树构建:有一个构建递归函数,它确定节点值并初始化子节点,然后构建子节点。
简化代码:
typedef struct Node {
int depth;
int noElements;
float probability;
struct Node *node0,*node1,*node4;
} Node;
void buildProbabilityTree(Node *node, int maxDepth) {
node->child1=malloc(sizeof node->child1);
//... set child1 values ...
buildProbabilityTree(node->child1,maxDepth);
node->child2=malloc(sizeof node->child2);
//... set child2 values ...
buildProbabilityTree(node->child2,maxDepth);
node->child3=malloc(sizeof node->child3);
//... set child3 values ...
buildProbabilityTree(node->child3,maxDepth);
}
int main(int argc, char *argv[]) {
Node root={0,0,1,NULL,NULL,NULL};
buildProbabilityTree(&root,3);
return EXIT_SUCCESS;
}
完整代码(仅限50行)http://pastie.org/private/cqiazmgp4bvexcidzlmutg
问题是:它不起作用!
我正在使用Codeblock和GNU gcc编译器。当我运行逐步调试时,程序没有问题就结束了。但是当我在没有调试器的情况下构建它时,程序在到达概率树的“底部”时崩溃。
任何人都知道这可能来自哪里? Code :: Blocks选项可能吗?编译问题? 感谢。
答案 0 :(得分:4)
(决定移动评论回答)
sizeof(node->node0)
没有按照您的想法行事。你只需要指定一个指针的大小,而不是你的结构。
更改你的malloc调用以分配sizeof(Node)
(或sizeof(*node->node0)
...虽然我认为前者更容易看到它们。
答案 1 :(得分:1)
我认为问题是你只有malloc(sizeof Node *)。所以你只为指针分配内存是不够的!
你应该是malloc(sizeof Node)。
尝试将malloc(sizeof node-> childx)更改为malloc(sizeof * node-> childx)。