有關指針行爲的快速問題(我正在PIC32MX270F256D上進行項目工作)。PIC32器件上的指針與調試器中的期望值不匹配
我目前執行以下代碼:
void main(void)
{
int size = 15;
int check;
int *ptr;
ptr = &size;
check = *ptr;
while(1); //just so it hangs at the end
}
現在我步進通過程序可變手錶上。在聲明尺寸後,我可以在監視窗口看到尺寸值爲15,地址爲0xA000FFC8(迄今爲止非常好)。在行ptr = &size;
之後,觀察窗口顯示ptr的值爲0xA000FFC8(如預期的那樣)。現在在最後一行(check = *ptr;
)之後,監視窗口顯示檢查值爲0xA000FFC8。
這對我來說似乎非常簡單的功能。最後,在while循環中掛起時,檢查值應該是15,否?如果是,我的代碼是否錯誤,或者Microchip IDE顯然有問題?如果沒有,我錯過了什麼讓它像這樣工作?
謝謝。
-Sean
注:我使用的MPLAB X和Microchip的XC32編譯器。
如果您的編譯器確定您的代碼實際上沒有做任何事情,那麼它會不會生成一些代碼(即優化它)?如果將'int * ptr;'更改爲'volatile int * ptr;'''check'會得到15嗎?你可以關閉編譯器優化嗎? – indiv 2014-11-21 19:11:24
^+ 1。看起來像優化問題。 – 2014-11-21 19:13:50
這一行:check = * ptr;導致未定義的行爲,因爲解引用指向地址15的點(其中地址15不是分配的內存地址)意味着讀取內存內容可能/可能進入只讀內存頁面。這'可能'導致seg故障事件。 – user3629249 2014-11-21 19:46:28