如何清除C中的内存内容?

时间:2012-11-19 12:40:54

标签: c

我正以这种方式定义一个char指针。

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

在我填写所有可能适合的值之后,我想清除我写给s的内容并且不使用malloc再次想要写入s?我怎么能这样做?

我需要更新内容,但如果在最后一次迭代中没有更新所有值,那么我将处理我不想做的旧值。

3 个答案:

答案 0 :(得分:4)

小心!

malloc(sizeof(2*5))malloc(sizeof(int))相同,并且在32位系统上仅分配4个字节。如果要分配10个字节,请使用malloc(2 * 5)


您可以使用malloc()memset(s, 0, 10)清除memset(s, 0, sizeof(int))分配的内存,以防万一这是您的意图。

请参阅man memset


清除内存的另一种方法是使用calloc而不是malloc。这将内存分配为malloc,但也将内存设置为零。

答案 1 :(得分:3)

有几点意见:

  • 您无需在C中投射malloc()的返回值。
  • 您的malloc()参数看起来不对;请注意sizeof是一个运算符,而不是一个函数。它将评估其参数类型的大小:2 * 5具有类型int,因此该值可能为4.请注意,对于所有整数表达式,这是相同的:sizeof 1是与sizeof 100000000相同。

你的问题很不清楚,要理解你为什么要“清除”字符串区域并不容易。内存是内存,它将保存你上次写入它的内容,没有必要在写入之间“清除”它。事实上,“清晰”只是写了一些具体的价值。

答案 2 :(得分:2)

您可以使用memset“清除”内存,并将内存块中的所有字节设置为0。例如:

#define MEMORY_BLOCK 10

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

//... do stuff

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