C語言分配記憶體後怎麼刪除特定記憶體的數值

2022-12-22 13:56:14 字數 3209 閱讀 3918

1樓:匿名使用者

三種辦法:

1)用一個額外的陣列表示menbers陣列中哪些是有效的,要刪除是隻需將menbers[3]對應的標誌置成不可用即可;

2)使用一個變數menberscount來表示有效的company個數,刪除後將後繼的company依次前移一個company空間, 前移時可以用memcpy函式。所有前移完成後menberscount--:

for(int i=3; i

3)在company中用一個標誌變數來表示當前的物件是不是有效的,比如 bool isvalid;

需要將其初始化為false, 在使用前判斷是否有效,刪除時直接將isvalid設定成false就可以了。

2樓:匿名使用者

記憶體就像旅館,申請記憶體相當於申請旅館的房間。在你住在旅館期間,你可以選擇在房間裡面放什麼東西。可以放有用的東西,也可以說「這個房間不再有用了,我以後都不會去管這個房間」。

但你要說「我想把這個房間炸掉(刪除掉)」,那肯定是不行的。

c語言中怎樣清空記憶體動態分配的堆空間

3樓:風若遠去何人留

在c語言中,要在堆上分配空間,需要使用記憶體申請函式。一般用malloc。

void * malloc(int size);

可以申請一段長度為size位元組的空間,並返回空間的首地址。

要清空分配的記憶體空間,也就是將該空間所有位元組均賦值為0,可以使用memset函式。

該函式宣告與string.h中,形式為

void memset(void *start, int value, int size);

如果要清空空間的首地址為p,大小為len,則可以呼叫memset(p, 0, len);

4樓:匿名使用者

如果你真要修改記憶體分配,自己控制的話,可以去查下資料

placement new。stl裡面很多都這樣用。

5樓:匿名使用者

你呼叫一次malloc() 就有相應的一個free()這兩個是配對使用了 如果它們倆的數目不對肯定會出錯的沒有一次性清空所有的動態申請的記憶體的函式,必須嚴格按照malloc 、free配對使用清空所花費的時間比排序本身還長 估計是你**本身有問題

c語言一個陣列記憶體裡的值,刪除某幾個數後按順序copy到另一個陣列怎麼弄。

6樓:聽不清啊

buf中有n個資料,複製後buf1中有n1個資料:

int i,j,n,n1;

j=0; n=15;

for(i=0;i

if(buf[i]!=0xff)

buf1[j++]=buf[i];

n1=--j;

7樓:芷好美

為什麼要刪除。。直接複製不行麼,遇到ff跳過。複製完再在新陣列裡排序。

8樓:匿名使用者

把需要刪除的元素的下標找出來如需要刪除a[i],然後a[i][j]=a[i+1][j+1]

c語言,為什麼動態記憶體分配申請後,還要再釋放?

9樓:蓴灬叔

1. 就算沒有free(),main()結束後也是會自動釋放malloc()的記憶體的,這裡監控者是作業系統,設計嚴謹的作業系統會登記每一塊給每一個應用程式分配的記憶體,這使得它能夠在應用程式本身失控的情況下仍然做到有效地**記憶體。可以試一下在taskmanager裡強行結束你的程式,這樣顯然是沒有執行程式自身的free()操作的,但記憶體並沒有發生洩漏。

2. free()的用處在於實時**記憶體。如果程式很簡單,那麼不寫free()也沒關係,在程式結束之前不會用掉很多記憶體,不會降低系統效能;而程式結束之後,作業系統會替你完成這個工作。

但開始開發大型程式之後就會發現,不寫free()的後果是很嚴重的。很可能在程式中要重複10k次分配10m的記憶體,如果每次使用完記憶體後都用free()釋放,程式只需要佔用10m記憶體就能執行;但如果不用free(),那麼程式結束之前就會吃掉100g的記憶體。這其中當然包括絕大部分的虛擬記憶體,而由於虛擬記憶體的操作是要讀寫磁碟,因此極大地影響系統的效能。

系統很可能因此而崩潰。

3. 任何時候都為每一個malloc()寫一個對應的free()是一個良好的程式設計習慣。這不但體現在處理大程式時的必要性上,更體現在程式的優良的風格和健壯性上。

畢竟只有自己的程式知道為哪些操作分配了哪些記憶體以及什麼時候不再需要這些記憶體。因此,這些記憶體當然最好由自己的程式來**。

10樓:匿名使用者

有申請就要有釋放~~~,這是c的原則

c語言 如何刪除陣列的某一項,不是把這一項的資料清0,而是直接刪除

11樓:竭瓏合經藝

陣列定義如下:char

str[20]

="hello

world"

這樣str[0]

就是h,而你想要的就第幾個然後減1,因為下標是從0開始計的,不是1開始計的。

12樓:布藍聞

這個是做不到的,必須把a[4],a[5]全部都以前一位,所以才會有容器vector和array的出現。你可以看一下c++的stl標準模板庫,這個在大學和工作都是重點。

13樓:

實在沒想出來。突然想起能不能a[3] == null;??

14樓:匿名使用者

這是不可以的,陣列又不是連結串列,怎麼能隨便刪除某個項呢....

c語言的free是怎麼釋放記憶體的?值和地址改變嗎?釋放後還能再次呼叫或者賦值嗎?區域性變數釋放和fr

15樓:你猜我猜哇擦猜

您好,樓上說的不準確,也不是很完整。

關於用malloc分配的記憶體,在呼叫free釋放後,該記憶體的狀態,有以下幾點說明:

1.呼叫free釋放掉所分配的記憶體後,表明該記憶體可以被別人使用,也就是說,其他地方呼叫malloc後,可以分配到該記憶體

2.關於free釋放該記憶體後,該記憶體中的資料,我們只能認為是髒資料;也就是說,這部分資料可能存在並且維持原來的值,也可能被清空,或者被修改為其他值;

由此可見,有很多中可能情況,所以,在釋放了該記憶體後,除了要對當時分配的指標賦值為null,還要注意不要再去引用這部分記憶體,不要嘗試獲取這部分的值,這些已經非法。

C 中new分配記憶體的問題,C 動態分配記憶體 記憶體洩漏問題 new

這樣是會有記憶體洩漏的,因為第一次執行s new stu 後,系統申請了一塊新的記憶體空間 型別為stu 並把其地址賦給s 第2此執行s new stu後,系統又申請了一塊新的記憶體空間,並把其地址賦給s,此時把s原來的值覆蓋掉了,也就是第一次申請的記憶體空間的地址丟失了 而delete s 只是把...

C語言 動態記憶體分配

p1 int malloc 10 sizeof int 就是生成了一個動態陣列啊 而且c語言裡p x 實際上就等價於 p x 只要p是指標型別的變數,不管它是陣列,還是其他什麼,都不會報錯 malloc函式的實質體現在,它有一個將可用的記憶體塊連線為一個長長的列表的所謂空閒連結串列。呼叫malloc...

c語言分配超大的記憶體地址,c語言 分配一個超大的記憶體地址

可能是我沒太看懂樓主的意思啊 個人還是覺得樓主可能是沒搞懂malloc的用法malloc可以申請到記憶體中可以申請的最大大小 一個int不算啥樓主是想做什麼呢?如果要給其他型別的引數分配空間就要 type a type malloc sizeof type 比如double double a dou...