我目前正在开发一个项目,我需要一些指向某些结构的指针。我为操作此数组的函数创建了一个全局变量来保存指向该数组的指针,以便我可以使用这些函数轻松访问它。但是,我遇到了一些问题,指针只是......改变了,而不是指向正确的东西。
我像这样创建数组:
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 ...
我不明白为什么会这样做......所以我来问专家...... :)
任何帮助都会很棒...... :)
答案 0 :(得分:4)
在initPQueue()中,pQueue在堆栈上分配;一旦该函数返回,该内存就不再有效。
要使数据在函数调用中存活,您需要使用malloc()(或其他一些内存分配函数)在堆上分配它。
答案 1 :(得分:2)
initPQueue
完成后,您的队列将不再存在(因为它是一个局部变量)。