全局变量数组指针C编程
问题描述:
我目前正在开发一个项目,我需要一些指向某些结构的指针。我已经创建了一个全局变量来处理这个数组来保存指向该数组的指针,这样我就可以轻松地使用这些函数来访问它。但是,我遇到了一些问题,指针只是......发生了变化,并没有指向正确的东西。全局变量数组指针C编程
我创建数组,像这样:
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中...
我不明白为什么这样做会这样...所以我来问专家.. :)
任何帮助将是巨大的... :)
答
在initPQueue(),pQueue是在栈上分配的;只要该函数返回,该内存不再有效。要使数据在函数调用中存活,需要使用malloc()(或其他一些内存分配函数)在堆上分配它。
答
一旦initPQueue
完成,您的队列将不再存在(因为它是一个局部变量)。
这是没有意义的,因为当我使用其他函数时数组仍然存在。那么..我想这将是因为我在技术上仍然在调用另一个功能。我看到... – Bri 2011-02-17 21:13:28