我正面临一个奇怪的问题。我有一个模块,说x.c
这是示例代码段代码:静态全局变量的地址改变了吗?
typedef struct lat {
int x;
int y;
int z;
} lat;
static lat x;
static void populate(int x, int y, int z) {
lat *pLat = &x;
printf(" The value of pLat is %p \n", pLat);
pLat->x = x;
pLat->y = y;
pLat->z = z;
}
extern dump_report(void *pPayload) {
lat *pLat = &x;
printf(" The value of pLat is %p \n", pLat);
memcpy(pPayload, pLat, sizeof(lat));
}
全局变量的地址是不同的(printf
S),在这两个功能呢? populate()
在模块内部被调用并给出正确的值,而dump_report()
被从另一个模块调用并产生全局变量和归零值的错误地址。
有人可以让我知道我是否做错了什么吗?
你是怎么确定由'populate'打印的地址是正确的地址的? (提示:不是。) – hvd
您是使用C或C++编译器 - 您的代码看起来像C,但您也使用C++标记过,我认为这是不合理的。 –