如何清除 C 语言中的内存内容



我以这种方式定义字符指针。

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

在我填写了所有可能适合这里的值后,我想清除我写到 s 的任何内容,并且不再使用 malloc 想写 s 吗?我该怎么做?

我需要更新内容,但如果在上次迭代中并非所有值都更新,那么我将处理我不想做的旧值。

小心!

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


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

见男人记忆。


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

您可以通过使用 memset 并将内存块中的所有字节设置为 0 来"清除"内存。 例如:

#define MEMORY_BLOCK 10
//allocate memory
unsigned char* s = malloc(MEMORY_BLOCK);
//... do stuff
//clear memory
memset(s, 0, MEMORY_BLOCK);

几点观察:

  • 不需要在 C 中强制转换 malloc() 的返回值。
  • 你的malloc()参数看起来是错误的;请注意,sizeof是一个运算符,而不是一个函数。它将计算其参数类型的大小:2 * 5 的类型为 int ,因此值可能是 4。请注意,这对于所有整数表达式都是相同的:sizeof 1sizeof 100000000 相同。

你的问题非常不清楚,不容易理解为什么你觉得你必须"清除"字符串区域。内存就是内存,它将保存您上次写入的内容,无需在写入之间"清除"它。事实上,"清除"只是某种特定价值的写入。

最新更新