簡體   English   中英

全局變量數組指針C編程

[英]Global variable array pointer C programming

我目前正在一個項目中,我需要一些指向某些結構的指針數組。 我已經為操作該數組的函數創建了一個全局變量,以將該數組的指針保存到該數組,以便我可以輕松地使用這些函數訪問它。 但是,我遇到了一些問題,其中的指針只是...在變化,並且不再指向正確的東西。

我像這樣創建數組:

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中,並且工作得很好。

我不明白為什么要這么做...所以我來問專家... :)

任何幫助都會很棒... :)

在initPQueue()中,pQueue在堆棧上分配; 該函數返回后,該內存將不再有效。

為了使數據在函數調用中幸存,您需要使用malloc()(或其他一些內存分配函數)在堆上分配數據。

一旦initPQueue完成,您的隊列將不再存在(因為它是局部變量)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM