如何在C语言中清除内存内容?

4
我正在以这种方式定义一个字符指针。
char *s=(char *)malloc(10);

当我填写所有可能适合的值后,我想要清除我写入到s中的任何内容,并且不使用malloc再次想s中写入?我该怎么做?

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


5
sizeof(2*5) 看起来有点奇怪... 也试试 sizeof(2/0) - Alex F
3
@AlexFarber 这将为您提供一个无限大小的块。 - huysentruitw
3
一个梦想成真了!你配得上诺贝尔奖 ;) - Nikos C.
5
@WouterH说:而sizeof(-1000)会给你一个负数大小的数组:如果你的内存用完了,这非常有用! - Vlad
1
如果您想将内存区域设置为零,可以使用calloc。顺便说一句,个人而言,当我内存不足时,我更喜欢拜托查克·诺里斯(Chuck Norris)帮忙。内存芯片会被吓得四分五裂,这样就给了我双倍的内存。好吧,这是查克·诺里斯在我把我的灵魂给他之后告诉我的。 - adentinger
显示剩余5条评论
3个回答

11

请注意!

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相同,但同时将内存设置为零。


5
您可以使用memset清除内存,将内存块中的所有字节设置为0。例如:
#define MEMORY_BLOCK 10

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

//... do stuff

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

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

您的问题非常不清楚,很难理解为什么您觉得必须“清除”字符串区域。内存就是内存,它将保留您上次写入的内容,在写入之间没有必要“清除”它。实际上,“清除”只是写入某些特定值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接