【发布时间】:2014-05-10 16:41:32
【问题描述】:
我写了一个方法,它应该使用递归来生长一个“雪花”,它本质上是一棵树。出于某种原因,在调试时,它只在树中添加了一行,并且不会更进一步。我认为它与指针有关,但似乎无法弄清楚它有什么问题。非常感谢您的帮助。
int growth(Snowflake * root, Snowflake * parent, Ray * ray){
printf("*\n");
printf("%f\n", root->ray->starting_point);
printf("%f\n", ray->angle);
if (root->middle != NULL){
printf("Found middle! \n");
growth(root->middle, root, ray);
}
else if (root->right != NULL){
printf("Found off center!\n");
growth(root->right, root, ray);
printf("Found off middle!\n");
growth(root->left, root, ray);
}
else{
if (parent == NULL){
printf("MY PARENTS ARE DEAD!\n");
parent = root;
//root = &parent;
}
printf("Starting Again!\n");
Snowflake * add = malloc(sizeof(Snowflake));
add->parent = parent;
add->middle = NULL;
add->right = NULL;
add->left = NULL;
add->ray = ray;
add->ray->starting_point = add->parent->ray->end_point;
add->ray->end_point = add->ray->starting_point + 1;
printf("%f\n",add->ray->starting_point);
printf("%f\n",add->ray->end_point);
if (add->ray->angle == 0){
add->parent->middle = add;
}
else{
add->parent->right = add;
add->parent->left = add;
}
return 1;
}
}
【问题讨论】:
-
你试过使用调试器吗?
-
请缩进您的代码并提供
Snowflake和Ray类型的定义。 -
@Dutt,你有没有试过读OP的前两句话...?
-
如果程序在调试器下的行为不同并且独立运行,这通常是由未初始化的变量引起的 - DEBUG版本可能以稍微不同的方式分配变量。此外,内存分配器可能会在调试版本中使用某种模式填充取消分配的块,因此如果您使用指向已释放内存的指针,您可能会在应用程序的发布和调试版本中获得不同的行为。