重用缓冲区指针_before_ free

reusing buffer pointers _before_ free

我对 C 还是有点陌生​​,尤其是动态内存分配:在它的定义和可能的 free 之间重用缓冲区指针是否安全 without重新初始化它?

我说可能是免费的,因为指针可能指向静态分配的缓冲区:

char buf[1024];
char *bufp = buf;

因此,如果我有一个名为 tmp 的缓冲区指针,我是否需要重新初始化它以保证任何先前的赋值都将被覆盖?

这些安全吗:

或者我应该将 tmp 分配给 '[=16=]'(即 tmp = '[=17=]';)或者在每个分配

之间做类似 memset(tmp, '[=18=]', sizeof tmp) 的事情

您的第一个代码示例没有问题(sizeof 问题除外)。您分配一些内存,然后将内容写入其中,然后用其他内容覆盖它。

在第二个代码示例中,它没有按照您的想法进行操作。该行:

tmp = "foo";

使 tmp 指向已存储 "foo" 的内存部分。它不会将 foo 复制到 tmp 当前指向的位置。这会导致内存泄漏,因为现在没有指向您 malloc 的区域的指针。

代码应该是:

char *tmp = malloc(1024);    // sizeof(char) always 1
strcpy(tmp, "foo");
strcpy(tmp, "bar");
free(tmp);