【发布时间】:2014-05-21 03:44:20
【问题描述】:
我对 C 语言还是很陌生,正在试图弄清楚为什么我(相信)我遇到了分段错误。我说相信,因为 exe 停止工作,所以我只是尝试在 Eclipse 的调试器中运行它,这就是我看到错误发生的地方。非常欢迎任何帮助/建议/批评。
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
struct node *left;
struct node *right;
double key;
} node;
void addNode(double value, node **node);
double dRand();
//node* search(double value, node *root);
void killTree(node *root);
int main(void)
{
int nodesToAdd, i;
node *n = NULL;
node **p = &n;
nodesToAdd = 10;
for(i=0;i<nodesToAdd;i++)
{
printf("DEBUG: Adding node %d to tree\n", i+1);
addNode(dRand(), p);
}
printf("DEBUG: Finished creating tree\n");
printf("DEBUG: Freeing memory of tree\n");
killTree(n);
return 0;
}
double dRand()
{
return ((double)rand()/RAND_MAX)*10;
}
void addNode(double value, node **tree)
{
node *insert = malloc(sizeof(*insert));
insert->key = value;
while(*tree){
if(value < (*tree)->key) tree = &(*tree)->left;
else if(value > (*tree)->key) tree = &(*tree)->right;
else return;
}
*tree = insert;
}
void killTree(node *node)
{
if(!node){}
else
{
killTree(node->left);
killTree(node->right);
printf("DEBUG: Deleting pointer to node of value %f from mem\n", node->key);
free(node);
}
}
编辑:我认为错误来自尝试在分配内存之前引用左右节点,但我不确定我做错了什么。
EDIT2:非常感谢,效果很好!
【问题讨论】:
-
所以你在调试模式下运行它..?您没有获得有关崩溃/段错误发生在哪一行代码的信息吗?
标签: c segmentation-fault binary-tree