很簡單的函式,但是結果卻很有趣,求高手指點迷津testchar strcharmalloc 100char

時間 2022-10-25 00:15:46

1樓:匿名使用者

free(str);不代表把str清空,而是說str的記憶體空間是可以寫入資料.那麼,str原來的內容當然還在,

strcpy(str, "hello")時,str開始的6個位元組(char)記憶體空間被寫上了hello五個字元和乙個結束符,因為你定義了字串位址是從str開始的,*str='c';把第乙個位元組改成了c。在記憶體沒有被重新整理的時候它就會輸出:cello,

根據linux記憶體管理,你的程式申請的記憶體實際是乙個虛位址,你釋放後,系統會把你釋放的位址加到free_list中,同乙個虛位址的,實際的實體地址可能是不一樣的。

我理解,你申請一次記憶體時,虛位址和實際實體地址的對應關係在釋放時暫時不會變,但申請兩次記憶體時,可能位址鍊錶已經變化了,再釋放,實際實體地址已經變了。

2樓:影繞心間

free函式僅僅將指標所指向的記憶體釋放,並未將指標指向null,該段**中str指標將會變成野指標,而使用野指標是一件十分危險的事情。

3樓:

這個程式本身就不正確,已經將申請的記憶體釋放了,再去訪問,是會引起程式崩潰的。很危險的做法

4樓:匿名使用者

以下全是我猜測的:

你上網搜一下free的源**就知道了,free函式只是把malloc申請到的記憶體塊中某個特殊的標誌變了一下而已,並沒有立刻就清空記憶體塊中的資料。是否釋放這塊記憶體是作業系統自己來判斷的,而且釋放後是否會對記憶體塊鏈進行調整,使記憶體碎片減少,都是用作業系統自己來進行的。

所以,我認為如果沒有第二個malloc語句的,free(str)之後這個程式申請的記憶體塊全都沒有了,這種情況下,記憶體的可使用空間已經最大了,作業系統可能會等到程式結束後再統一清理記憶體,暫時不處理記憶體塊鏈。而如果有第二個malloc語句的話,free(str)後,在記憶體塊鏈上還有分配的記憶體塊的情況下,系統可能會對記憶體塊鏈進行一定調整,以減少記憶體碎片,很可能在這個調整的過程中,str指向的那片記憶體空間的資料受到了影響,變成了髒資料,所以輸出了亂碼。

5樓:醫者仁也吧

ransition and uncertainty

一道c語言題,初學題,但是期待詳細答案o(∩_∩)o

6樓:匿名使用者

先說下以後不要用翻譯來的中文,如不會請用原英文,我想會有看得懂的。象你上面說的--從乙個字串所有的領先空格,不知是哪個翻譯**,可以關閉了。

編寫乙個名為trimrear()的c語言函式,刪除乙個字串前的所有空白字元。用指標編寫該函式。

該題主要要用到下面這函式:

int isspace(int ch) 若ch是空格(' '),水平製表符('\t'),回車符('\r'),走紙換行('\f'),垂直製表符('\v'),換行符('\n')返回非0值,否則返回0。在標頭檔案

#include 中

char * trimrear(char *str)return p;

}使用時這樣呼叫就行。

#include

#include

main()

7樓:高速路上飆單車

#include

char* trimfrnt(char * str)

main()

8樓:匿名使用者

翻譯的真差勁!

write a c function named trimfrnt()that deletes all leading blanks from a string.write the function using pointers.

寫乙個名為trimfrnt()的函式,它從字串中刪除所有的前導空格。

用指標寫這個函式。

非常簡單,如下:

char *trimfrnt(char *s)

9樓:人才

"從乙個字串所有的領先空格"

什麼意思?

求c++面試題及答案

10樓:匿名使用者

程式設計師面試寶典 第2版 ,關於c/c++的。

我有電子版,給我郵箱好傳給你

11樓:匿名使用者

12樓:匡金後方

自己在網上一搜就出來了。因為c/c++的面試題是非常多的。

13樓:刁姝環曼文

我是在這上面看的。c++面試題

愛很簡單的歌詞,愛很簡單歌詞

忘了是怎麼開始 也許就是對你 有一種感覺 忽然間發現自己 已深深愛上你 真的很簡單 愛得地暗天黑都已無所謂 是是非非無法決擇 沒有後悔為愛日夜去跟隨 那個瘋狂的人是我 喔i love you 無法不愛著你 說你也愛我 i love you 永遠不願意 baby 失去你不可能更快樂 只要能在一起 做什...

關於地球公轉的問題很簡單很簡單啊

我狂暈!這麼簡單的題目這麼多人做錯啊!正確答案是b啊,近日點的日期是一月初.一月初明白是什麼意思不?各位大哥啊!a就錯了,自然c也錯了,12.22是冬至,北半球太陽高度角達一年的最小值,過了12.22那天,太陽直射點就開始向北移動!廣州的的緯度比北京低,冬天的時候白晝比北京長!樓主我的答案你滿意!項...

來看看很簡單,很簡單的 快來看看

就是在計算右 小數的時候。4時,n舍,n 6時,n入,x.m 1 n 5,就看q,按4舍5入,保留。四捨六入五成双是一種精確度的計數保留法。這裡 四 是小於五的意思,六 是大於五的意思,五 是捨入位之後的尾數逢五的話看前一位,奇進偶不進。如1.25保留一位小數,因為2是偶數,所以是。又如1.35,因...

很簡單的彙編問題,很簡單的彙編問題

且看 ascii proc near mov si,4 mov cx,10 r2 mov dx,0 div cx add dl,30h dec si 這樣的話,有兩個辦法,1.si作為乙個返回值,你需要在返回後及時處理,或在內部處理,如在ret前加add bx,si,以便得到正確的字串首位址,2.將...

英語翻譯 很簡單,很簡單的英語怎麼寫?

1.不改。are there many cars behind the building?be on the bike the boy is on the bike.you for doing sthyour是形容詞性物主代詞,後面跟名詞。you for doing sth 動名詞或名詞。根據單詞發...