我目前正在做一个项目,我需要一个指向某些结构的指针数组。我为操作此数组的函数创建了一个全局变量以保存指向该数组的指针,因此我可以轻松地使用函数访问它。但是,我遇到了一些问题,指针只是......发生了变化,不再指向正确的东西。
我这样创建数组:
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()(或其他一些内存分配函数)在堆上分配它。
关于c - 全局变量数组指针C编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5034630/