c語言可以釋放數組中的單個元素結構么?


不能,只能一次全部幹掉。


通過malloc生成一個數組,然後通過malloc創建結構元素,一一插入,等一段時間使用之後,可以通過迭代這個數組一一刪除這裡面的每個元素再刪除這個數組對象么?我試過,幾次都報錯,程序crash了。如果不能,那麼怎樣才能回收數組中每個元素所申請的內存空間?

你這問題描述著的不知所云。你要首先定義你說的數組是不是C語言語法中說定義的數組,是不是在內存中連續的一段地址空間等等。我看你這描述大概是想造一個鏈表???還有你要定義什麼是刪除。。。所以啊,你把你的代碼貼出來更直觀一些,對象?C裡面有對象這個概念?

就醬。


myStruct** ptr=(myStruct**)malloc(10*sizeof(myStruct*));

int i=0;

for(;i&<10;i++)

{

ptr[i]=(myStruct*)malloc(sizeof(myStruct));

}

是這個意思吧,一旦某個元素指針用不到了就可以free(ptr[i]) ,等所有的ptr[i]都被free後就可以free(ptr)


你的意思是不是在數組裡面存放指針,然後再針對每個指針進行內存申請?當然可以,掛掉肯定還是程序有問題,注意申請釋放順序,注意空指針,防止野指針,好好看看,一定能看出問題的。


show me the code


菜雞上來強答一發。

我也曾經遇到過這個問題。

首先你要知道在數組中remalloc的作用機理。它是創建一個內存比原來大的數組,然後再將原本的數組,複製到新創建的數組中。同時。數組是一個整體的內存,不能單獨刪除。


快上代碼吧。

描述讓人難以理解的時候,show code比較管用。


你說的是指針數組? 數組裡每個元素存放一個指針? 然後每個指針指向一小片內存。

你說的過程應該是可以的。估計你程序寫的有問題。

還有,如果你非要這麼乾的話。建議你在把數組分配出來後,立刻把裡面所有東西都初始化成0。

以後你每free掉一塊內存,也盡量把那個指針賦值成null(0)。


你都說是新手了 問題都描述不清 就不能上代碼嗎?

建議看看 @陳碩 的提問須知

提問須知(分享自知乎網)

http://zhuanlan.zhihu.com/p/20752519


只要能拿到對應的指針就能釋放掉,就看你能不能拿到。


理論上C語言從「操作粒度」上來說是可以的,然而這樣做沒有意義,空間粒度分的很細,時間粒度不值得

原諒我只能這麼表述

不知道大家對於「粒度」有沒有更好的表述,尺度?


不怎麼看得懂你在說什麼,什麼叫malloc一個數組再malloc一個個元素插入?


一次性開的內存空間就只能一次性釋放

要想實現刪除某一個節點,不如試一試鏈表,多來幾次結構不會死


推薦閱讀:

怎麼用c語言實現分形圖形?
如何通俗地解釋 C 語言中 #include<> 的用途?
C語言 主函數退出前,還佔用了大量的內存,是什麼原因造成的呢?
vc++6.0是不是很多優點?如何使用visual studio2013達到相同的功能?

TAG:C編程語言 | 內存管理 |