全局变量在函数外部变为null

时间:2013-03-30 06:59:28

标签: c

我是C的新手,所以我确信这很容易。

我正在尝试在头文件中声明array[10]个分数,并在我的example.c文件中将其定义为静态变量。我在我的函数init_heap()中初始化它。但是,当该函数返回时,数组的所有元素都为null。我该怎么做呢?我需要对myArray进行更改才能坚持下去。

标题摘要:

struct fraction
{
    signed char sign;
    unsigned int numerator;
    unsigned int denominator;
};

extern struct fraction *myArray[10];

example.c

//includes...

static struct fraction *myArray[10];


void init_heap()
{
    struct fraction myArray[] = {
        {0,0,1},
        {0,0,2},
        {0,0,3},
        {0,0,4},
        {0,0,5},
        {0,0,6},
        {0,0,7},
        {0,0,8},
        {0,0,9},
        {0,0,10}
    };
    beginFreeIndex = 0;
}
//etc...

提前致谢..

1 个答案:

答案 0 :(得分:2)

struct fraction myArray[] = {
    {0,0,1},
    {0,0,2},
    {0,0,3},
    {0,0,4},
    {0,0,5},
    {0,0,6},
    {0,0,7},
    {0,0,8},
    {0,0,9},
    {0,0,10}
};

你正在创建一个名为myArray的本地数组,它隐藏了全局myArray。然后,当您的函数结束时,本地myArray超出范围而您将丢失所有内容。同时,全局myArray仍为空。

尝试:

    myArray = {
    {0,0,1},
    {0,0,2},
    {0,0,3},
    {0,0,4},
    {0,0,5},
    {0,0,6},
    {0,0,7},
    {0,0,8},
    {0,0,9},
    {0,0,10}
    };

编辑:

正如@David Heffernan所指出的那样,你在这一行中声明了一系列指向struct fraction的指针:extern struct fraction *myArray[10];。我认为你只想获得一个struct fraction的数组,所以你应该尝试使用它代替那一行:extern struct fraction myArray[10]