[英]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.