2012-11-19 22 views
0

我正在用這種方式定義一個char指針。如何清除C中的內存內容?

char *s=(char *)malloc(10); 

我填的,可以適應這裏的所有可能值之後,我想清楚無論我寫信給S和不使用malloc又要以s寫?我怎樣才能做到這一點?

我需要更新內容,但如果在最後一次迭代中沒有更新所有的值,那麼我將處理舊值,我不想這樣做。

+0

請解釋一下你的意思是「清楚」。 –

+1

如果你想更新's'的內容,爲什麼還要清理這個值呢? – Vlad

+5

'sizeof(2 * 5)'看起來很有趣...試一下'sizeof(2/0)' –

回答

4

小心!

malloc(sizeof(2*5))malloc(sizeof(int))相同,並且在32位系統上僅分配4個字節。如果你想分配10個字節,使用malloc(2 * 5)


您可以memset(s, 0, 10)memset(s, 0, sizeof(int))清除malloc()分配的內存,以防萬一,這是你真的打算什麼。

請參閱man memset


清除內存的另一種方法是使用calloc而不是malloc。這將malloc分配內存,但也將內存設置爲零。

2

您可以使用memset「清除」內存,並將內存塊中的所有字節設置爲0。例如:

#define MEMORY_BLOCK 10 

//allocate memory 
unsigned char* s = malloc(MEMORY_BLOCK); 

//... do stuff 

//clear memory 
memset(s, 0, MEMORY_BLOCK); 
3

一對夫婦的意見:

  • 你並不需要轉換的malloc()的返回值C.
  • malloc()參數看起來不對;注意sizeof是一個操作符,而不是一個函數。它將評估其參數類型的大小:2 * 5的類型爲int,因此該值可能爲4.請注意,對於所有整數表達式,這是相同的:sizeof 1sizeof 100000000相同。

你的問題很不清楚,不明白爲什麼你覺得你必須「清除」字符串區域。內存是內存,它會保存你上次寫入的內容,不需要在寫入之間「清除」它。事實上,「清晰」只是一些具體的價值。