C 将指针返回到float会在到达main函数时更改地址
主要方法C 将指针返回到float会在到达main函数时更改地址,c,pointers,C,Pointers,主要方法 int x, y; printf("Please enter 2 integers separated by a space: "); scanf("%d %d", &x, &y); 其他方法。这是从主函数调用的矩阵_get函数的一部分 if (key_comp (key, node->key) == 0){ data_print(node->data); 某些头文件 typedef float Data_Item; 好
int x, y;
printf("Please enter 2 integers separated by a space: ");
scanf("%d %d", &x, &y);
其他方法。这是从主函数调用的矩阵_get函数的一部分
if (key_comp (key, node->key) == 0){
data_print(node->data);
某些头文件
typedef float Data_Item;
好的,当我返回指向Data_项的指针(它是一个float typedef)时,它的地址会改变,因此当我在main方法中取消引用它时,它会变为null。为什么?
printf("%d", &pdata);
应该是
printf("%f", *pdata);
您试图打印指针的地址,而不是指针的值。试图用%d
打印地址未定义。对浮动使用%f
。使用
为指针分配的内存会泄漏,因为指针的值被局部变量的地址覆盖。相反,您应该将局部变量中的数据复制到为指针分配的内存中
*pdata = node->data;
线路
pdata=&(node->data);
更改pdata
的值。它现在与malloc
返回的值不同。您已经注释掉的更合理的一行是:
//*pdata=node->data;
在第一行中,您将pdata
指定为节点->数据的地址。在注释掉的行中,您试图通过node->data
设置pdata
指向的值
您缺少来自两个分支的返回值
改变
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);
}
到
嗯,我只是在打印pdata的地址,看看它是否发生了变化(确实发生了变化)。printf函数与任何事情都无关,它只是用于调试目的。当我将助手函数的pdata地址返回到主函数时,它的地址发生了变化。所以当我将其更改为您所说的内容时,程序现在崩溃了。我想这是因为*pdata是未定义的?因为那个指针什么都不指向..该是你使用调试器的时候了!当我用注释掉的行替换上面的行时,它仍然崩溃。知道为什么吗?我从你发布的代码中看不到任何东西。可能是matrix\u get
从其他地方返回。抱歉,我用了更多内容编辑了我的线程。我只是有点害怕我的老师会认为我偷了代码,然后给我一个0.::(bs_tree\u search\u h
的最后一行返回NULL
。有可能是你碰到了那一行。我可以保证它没有碰到那一行,我已经测试过它是否用指针碰到了bs_tree\u search\h的return语句。不过我不确定我写的矩阵函数是否正确?
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);
}