【问题标题】:Global variable array pointer C programming全局变量数组指针C编程
【发布时间】:2011-02-17 21:03:58
【问题描述】:

我目前正在做一个项目,我需要一个指向某些结构的指针数组。我为操作该数组的函数创建了一个全局变量,以保存指向该数组的指针,这样我就可以使用函数轻松访问它。但是,我遇到了一些问题,指针只是......改变并且不再指向正确的东西。

我这样创建数组:

void initPQueue()
{
    EventPTR pQueue[qSize];
    int i;
    float t;
    for(i = 1; i < qSize; i++)
    {
        t = getNextRandomInterval(getL());
        pQueue[i] = createEvent(t); 
    }

    setpQueue(pQueue);
    buildpQueue();

}

我使用 setpQueue(pQueue) 来设置全局变量......就像这样......

void setpQueue(EventPTR* pQueue)
{
    pQueuePTR = pQueue;
}

全局变量声明为:

EventPTR* pQueuePTR;

这是我的结构:(在我的 .h 文件中..atm)

struct event {
    float eTime;
    double sTime;
    int status;
};

typedef struct event Event;
typedef struct event* EventPTR;

到目前为止,一切都很棒。我的 buildpQueue 甚至可以正常工作...使用 pQueuePTR .... 但是...我去制作一些测试函数来输出 pQueue 数组,这就是它变得丑陋的地方...

void outTest()
{
    int i;
    printf("\n\n");
    for(i = 0; i < qSize; i++)
    {
        if(pQueuePTR[i] != NULL) printf("%f ", pQueuePTR[i]->eTime);
        else printf("NULL ");

    }
}

这给了我输出,就像指向数组的指针包含空值一样,但它不包含空值......这个函数和最后两个都在同一个文件中。我什至把这个循环放在 setpQueue 中,它工作得很好......就像在 outTest 中一样......

我不明白为什么会这样...所以我来请教专家... :)

任何帮助都会很棒... :)

【问题讨论】:

    标签: c arrays pointers data-structures


    【解决方案1】:

    在initPQueue()中,pQueue是在栈上分配的;一旦该函数返回,该内存就不再有效。

    要使数据在函数调用中保留下来,您需要使用 malloc()(或其他一些内存分配函数)在堆上分配它。

    【讨论】:

    • 这没有意义,因为当我使用其他函数时数组仍然存在。好吧..我想那是因为我在技术上仍然在调用另一个函数时。我明白了……
    • 您也可以将static 添加到您的pQueue 声明中。然后,即使从initPQueue 函数返回,它仍然存在。
    【解决方案2】:

    一旦initPQueue 完成,您的队列将不再存在(因为它是一个局部变量)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-11
      • 2014-05-18
      • 1970-01-01
      • 2011-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-14
      相关资源
      最近更新 更多