這段來自《C語言深度剖析》關於指針的部分
#include
int main()
{
// int i=10;
int *p=(int *)0x00bef95c;//0x00be95c是變量i的地址
*p=NULL;//這一行的問題
p=NULL;
return 1;
}
在VS2010下測試時,提示:CX0069:錯誤:變量需要堆棧幀
在Ubuntu下測試時,有一個warning如下:
warning: assignment makes pointer from integer without a cast
問題來了:1.對堆棧幀不太了解,百度了,但是都是一些關於堆棧的回答,沒有滿意的
2.不清楚為什麼在VS下有這麼一個錯誤,而linux下只是一個warning
root@landpack:~/ak/code/c/test# ./t20
A40A972Croot@landpack:~/ak/code/c/test# ./t20
7ABE0FCroot@landpack:~/ak/code/c/test# ./t20
47769E8Croot@landpack:~/ak/code/c/test#
以上是我的執行結果:
代碼如下:
#include <stdio.h>
int main(void)
{
int i=10;
printf("%X",&i);
return 0;
}
你在代碼中試圖讓一個指針強制指向一個地址,
而這個地址我估計你只是上一次執行後記錄下的,然後試圖賦值給p
程序每次加載到內存中執行時分配給變量的地址都在改變,你怎麼能這樣給p賦值呢!
希望能幫到你!