从结构指针打印时出现间歇性故障

时间:2016-03-09 15:42:40

标签: c struct

我设法压缩出现问题的代码:

#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()中打印值,则值有时是正确的,或者它们会打印随机数。理解这一点的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

您正在从函数返回一个局部变量。这引起了问题。

当程序存在于函数information()中时,您在main中使用的地址变量constants已超出范围。
要解决此问题,您需要使用动态分配在函数information()中创建对象。并释放在main中动态分配的内存。