我设法压缩出现问题的代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct
{
double height;
double hello;
}Variables;
void information(Variables **Constants);
int main()
{
Variables *Constants=NULL;
information(&Constants); //Assigns values to the structure pointer
printf("Height %lf \n",Constants->height); //These print correctly only
printf("hello %lf \n",Constants->hello); //intermittently
return(0);
}
void information(Variables **Constants) //Assigns values structure pointer
{
Variables *consts,constants;
constants.height=10;
constants.hello=20;
consts=&constants;
*Constants=consts;
printf("Height %lf \n",constants.height); //These always print correctly
printf("hello %lf \n",constants.hello);
return;
}
据我所知,这段代码应该在main *Constants
中创建一个结构指针。然后使用information(&Constants)
将该指针传递给函数。在information()
中创建另一个指针并分配一个结构变量。然后填充变量并将指针分配给*Constants
,然后将整个结构传递回main()
。
如果我在information()
内打印结构,则值是正确的。但是,如果我在main()
中打印值,则值有时是正确的,或者它们会打印随机数。理解这一点的任何帮助将不胜感激。
答案 0 :(得分:2)
您正在从函数返回一个局部变量。这引起了问题。
当程序存在于函数information()
中时,您在main中使用的地址变量constants
已超出范围。
要解决此问题,您需要使用动态分配在函数information()
中创建对象。并释放在main中动态分配的内存。