2015-04-01 29 views
0

我在網上讀到懸擺指針,當我發現這個鏈接的代碼:這是一個懸掛指針?

http://www.billioncodes.com/c/ques-and-ans/747-what-is-dangling-pointer-give-an-example-on-pointers-to-pointer-and-passing-by-address

我會把它貼在這裏:

#include <stdio.h> 
void f(int *j) 
{ 
    (*j)++; 
} 
int main() 
{ 
    int i = 20; 
    int *p = &i; 
    f(p); 
    printf("i = %d\n", i); 
    return 0; 
} 

如何,這是一個懸擺指針,並指針懸掛?該代碼看起來對我有效。它應該打印「我= 21」並返回。我沒有看到任何懸掛的指針。

+0

嗯......你是否執行了代碼,看它是否真的做到了這一點? – noahlz 2015-04-01 22:39:10

+9

這段代碼中沒有懸掛指針。 – 2015-04-01 22:40:23

+6

我建議你再也不會在億碼網站上看到任何東西,那裏似乎沒有明智的內容。 – nos 2015-04-01 22:44:17

回答

4

該程序中沒有懸掛指針。

p初始化爲指向ipi都具有完全相同的生命週期; pi所做的同時不再存在(離開最近的封閉塊時)。

j,在功能fint*參數,指向i(它初始化爲參數p,它指向i的值)。 j的生存期僅限於執行功能f中的塊; ii的生命開始和結束之前開始,並在i的生命結束之前結束。該程序應打印i = 21。沒有懸掛指針,沒有未定義的行爲。 (int main()應該是int main(void),但這是一個小問題。)