返回指向float的指针会在到达main函数时更改地址

时间:2014-03-29 05:46:51

标签: c pointers

主要方法

 int x, y;
    printf("Please enter 2 integers separated by a space: ");
    scanf("%d %d", &x, &y);

其他方法。这是从主函数

调用的matrix_get函数的一部分
if (key_comp (key, node->key) == 0){
       data_print(node->data);

一些标题文件

typedef float Data_Item;

好的,当我返回指向Data_Item的指针(它是一个float typedef)时,它的地址会发生变化,所以当我在main方法中取消引用它时,它变为null。为什么呢?

2 个答案:

答案 0 :(得分:0)

printf("%d", &pdata);

应该是

printf("%f", *pdata);

您正在尝试打印指针的地址而不是指针的值。尝试使用%d打印地址未定义。使用%f进行浮动。使用wrong format specifier invokes undefined behaviour

为指针分配的内存会泄漏,因为指针的值会被本地变量的地址覆盖。相反,您应该将局部变量中的数据复制到为指针分配的内存中。

*pdata = node->data;

答案 1 :(得分:0)

该行

   pdata=&(node->data);

更改pdata的值。它现在与malloc返回的值不同。你注释掉的更有意义的一行是:

   //*pdata=node->data;

在第一行中,您将pdata指定为node->data的地址。在注释掉的行中,您试图设置pdata指向node->data的值。

你错过了两个分支的return

更改

if(key_comp (key, node->key) == -1){
      bs_tree_search_h(node->left, key);
}else if(key_comp (key, node->key) == 1){
      bs_tree_search_h(node->right, key);
}

if(key_comp (key, node->key) == -1){
      return bs_tree_search_h(node->left, key);
}else if(key_comp (key, node->key) == 1){
      return bs_tree_search_h(node->right, key);
}