我正面臨一個奇怪的問題。我有一個模塊,說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++標記過,我認爲這是不合理的。 –