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

giz*_*gok 1 c

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

char *s=(char *)malloc(10);
Run Code Online (Sandbox Code Playgroud)

在填写了所有可能的值后,我想清除我写给s的任何内容,而又不想使用malloc来写s了吗?我怎样才能做到这一点?

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

Jas*_*son 5

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

#define MEMORY_BLOCK 10

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

//... do stuff

//clear memory
memset(s, 0, MEMORY_BLOCK);
Run Code Online (Sandbox Code Playgroud)


Ola*_*che 5

小心!

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


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

男人memset


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