2012-09-17 20 views
-1

我已經爲某些數據類型分配了內存並分配了一些值。現在使用free是內存中的數據是否被刪除?如果分配的數據未被刪除,使用free的用法是什麼?誰能幫我嗎?例如:c中的自由函數

int *arr; 
arr=(int*)malloc(sizeof(int)*1000); 
assert(arr!=NULL); 
/*Some operation*/ 

arr[123]=354; 
//some operations 

printf("%d",*(arr+123)); 
//calling some funcs 

free(arr); 

printf("\n%d",*(arr+123)); 
+3

'arr'和'arr2'之間的連接是什麼?這很混亂。 –

+1

你在做什麼是未定義的行爲。如果它打印出合理的價值,那麼你應該認爲這是巧合。 –

+0

查看此答案以獲取更多信息:http://stackoverflow.com/questions/1119134/how-do-malloc-and-free-work?lq=1 –

回答

5

free點就是讓你分配的內存可用於以下至malloc電話。它不保證以任何方式擦除傳遞給它的緩衝區。

事實上,你在做什麼在挑起未定義的行爲;訪問一個free'd的緩衝區可能會給出先前存儲在其中的值或任何其他值,否則它可能會導致程序崩潰或執行其他任何操作。

2

你不能從內存中「刪除」東西。

free()確實這是什麼回收的內存,因此它可以通過向malloc()未來的呼叫被回收。

在調用free()之後,您無法從malloc()(或任何其他動態分配調用)合法取消引用該指針。這樣做會調用未定義的行爲。

0

通過使用malloc,您可以預留指定數量的字節以用於任何您想要的內容。返回的是該地區的地址。內存區域也被標記在一個特殊的表中,佔用意味着它不能被另一個進程或另一個malloc保留。

當您釋放分配的內存時,該區域被標記爲空閒,但數據未被擦除。如果你想刪除數據,你必須做一個memset或手動循環,並將數據設置爲0或其他值,然後再釋放它

正如其他人所說的那樣,對空閒內存的操作是不確定的。

簡要介紹如何安排內存可以。在堆即看: http://www.geeksforgeeks.org/archives/14268或圖1在此評論的底部:Strange global variable behaviour, once variable name is changed issue disappears

我已經寫了一些更多的關於malloc的過程本身在這裏: Can some explain the performance behavior of the following memory allocating C program?哪裏還虛擬與物理內存,網頁等都是一些點。