請問這裡free為什麼不對,會造成懸空指標啊?謝謝

時間 2022-05-17 07:30:06

1樓:金色潛鳥

你這裡寫出的都是「宣告」,沒有出現語句,也沒有正式呼叫。

所以 與 出錯有關的 部分 只是:

void mbuf* amb; -- 是struct mbuf *amb 吧?

struct mbuf *amb; -- 宣告了全域性量,它是乙個指標,尚未分配 儲存單元,也未指向乙個有儲存單元的已知結構變數。

void bat()

----------

前面的 void bar(...) 它只是個宣告,不是語句,沒被呼叫過,所以amb=mb;並不起作用,不能幫助 解決 amb->x = 0; 的錯誤。

如果 你刪去 void bat() {}; 的宣告而 併入 bar 寫:

void bar(...) 在這個函式裡 賦值,就不錯了。

2樓:匿名使用者

怎麼說呢,要看bat函式在什麼地方呼叫了,不知道是不是foo函式寫漏了。

如果在跑完foo函式後,在其它函式裡呼叫bat函式,那麼由於amb指向的記憶體已經在foo函式中通過free(mb)釋放了,所以會造成訪問越界。

3樓:李尋歡啦

因為在bar函式中指標amb是指向mb的,而沒有開闢新的記憶體,即amb與mb是指向同一塊記憶體的,所以在foo函式中釋放mb後,amb也就相應釋放了,也就是說此時amb是空的。建議你在bar中為amb重新申請一塊記憶體,再把mb的所有值賦給amb。

為什麼free函式釋放掉動態記憶體後,不把指標置null,而造成沒什麼用的野指標?

4樓:匿名使用者

free前

指標指向了乙個記憶體空間,這是合法記憶體,利用指標可以正常訪問該空間free後,

指標指向的這段空間被釋放了,這段記憶體搖身成為不可用的」垃圾「記憶體但是指標本身還存在,並且值也沒變

還是指向了這段空間

這段free前可用free後成為垃圾記憶體的記憶體free後屬於指向非法記憶體塊

這就是野指標

5樓:匿名使用者

為了效率

有時候指標是區域性變數釋放掉記憶體後,函式結束了指標變數自然就不存在了這時置為null不是多此一舉

需要的時候編寫者在**裡自行新增

c語言的設計初衷就是為了保持高效率,但同時提高**的可讀性。

6樓:

所謂野指標是指:指向「垃圾」記憶體(不可用記憶體)的指標。

你的指標指向的位址,在沒有free之前你還可以使用,而釋放後就不能再使用了,所以就變成了野指標。

置null(0)的指標其實也是野指標,只不過因為0很容易用if來判斷,所以人為的把指向0的指標區別出來不當野指標而已。

簡單來說就是因為人們認為指向0的指標就不是野指標而已。但是置不置0從某些角度來說沒啥關係。

編c語言時,為什麼指標懸空後,系統會崩潰?

7樓:鷹弈

懸空指標指的是定義指標變數時未置null

野指標指的是使用完指標後未置null

就這兩種情況而言其實並不危險,危險的是你的使用初衷和你**表達的意思相違背

如果做到了以上兩句,那麼你每次使用指標前,只需要判斷指標是否為null從而可知是否為合法指標

非合法指標自然導致程式崩潰或隱藏危險,如果崩潰那你就要謝天謝地了,如果隱藏危險,那就相當於你的程式得了神經病,讓你抓狂...

8樓:匿名使用者

指標懸空後,如果一直被棄置不用除了一些記憶體被無緣無故的被占用外,不會有其他不好的影響。

但是一旦乙個指向未知的指標被程式呼叫,並且進行了寫操作,這就有危險了。

如果這個指標指向了系統核心程序那麼這個程序有可能引意外的寫操作而異常進而導致系統崩潰,更可怕的是,如果這個指標如果指向了硬體驅動,如印表機、記憶體、cpu排程或溫度控制。

那後果就是硬體的損毀。

9樓:匿名使用者

指標變成null後,沒有指向具體的記憶體,如果要通過這個指標訪問記憶體的話,系統會找不到應有的記憶體,就會崩潰啊

10樓:匿名使用者

樓主你這個是野指標的問題,如果你想釋放掉指標開闢的空間,可以使用free(point)釋放,然後point=null,也就是樓主所說的指標懸空,這樣系統就不會出現問題了!

free()函式釋放指標之後,為何還能輸出指標指向的內容?

11樓:篤俠

因為釋放指標,只是將指標所指的記憶體空間交還給系統,而指標變數的內容(即剛釋放的記憶體位址)並為改變,所以還能輸出。但此時的指標一般稱之為「野指標」,是很危險的。

所以,一般要求釋放指標後,緊接著將其置為空:

free(p);

p=null;

12樓:

你編譯器的問題吧,我這裡 printf("p=%s\n",p) ; 沒有輸出的。

// 不用對 malloc 返回的指標強制轉換?

char *p = (char*)malloc(100);

13樓:匿名使用者

p指標還存在,只是所指的內容隨機改變了。

請問這個是什麼蟲子,會咬人嗎,請問這個是什麼蟲子,會咬人嗎?

我們老家叫牛蚊子,會吸牛血,特別是夏天,牛在河裡洗澡,身上全是,好可憐 這種昆蟲是跟蒼蠅差不多,它不咬人,但是可以通過這種昆蟲來傳播病毒,還是小心點。 蜜蜂,會咬,傷害不是很大,拍死就好啦農村屋頂很多 姑蘇老師 這個是蜂子。他們是屬於蜂類,但是不是蜜蜂不會採蜜。他們是不會咬人的,一般沒有什麼傷害力。...

請問這是什麼蜘蛛,會咬人吸血嗎,請問這是什麼蟲子,很會咬人,吸血很快速,爬的也很快,吸血後全身通紅,看起來像小蜘蛛,差不多2mm大小

這種是很普通的蜘蛛,它應該不會咬人,除非你去弄它。還有你家裡出現這種蜘蛛,應該多打掃衛生,保持家中整潔,不然會越來越多的.一下弄死他,或者弄個東西不用手接觸就可以把它扔出去,這麼小的蜘蛛應該不會,除非是蜘蛛俠。不會啦,這種蜘蛛多在植物叢裡 不會傷人。也可以噴點殺蟲劑。請問這是什麼蟲子,很會咬人,吸血...

請問這是什麼魚?會爬樹的

鰻魚,拼音 拼音 m n 別名 白鱔 白鰻 河鰻 鰻鱺 青鱔 風饅 日本鰻。鰻魚是指屬於鰻鱺目分類下的物種總稱。又稱鱔,是一種外觀類似長條蛇形的魚類,具有魚的基本特徵。此外鰻魚與鮭魚類似具有洄游特性。鰻魚屬魚類,似蛇,但無鱗,一般產於鹹淡水交界海域。 北京理工大學出版社 如果有一天,你在一條著名的河...