3

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

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

在我填写所有可能适合此处的值后,我想清除我写给 s 的任何内容,并且不再使用 malloc 想写在 s 中吗?我怎样才能做到这一点?

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

4

3 回答 3

8

当心!

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


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

请参阅man memset


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

于 2012-11-19T12:45:43.120 回答
4

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

#define MEMORY_BLOCK 10

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

//... do stuff

//clear memory
memset(s, 0, MEMORY_BLOCK);
于 2012-11-19T12:44:50.070 回答
3

几点观察:

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

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

于 2012-11-19T12:46:29.213 回答