是否需要释放使用“ strcpy ”创建的字符串?以及如何释放它?
编辑:目的地是这样分配的:
char* buffer[LEN];
strcpy
它本身不会为目标字符串分配内存,因此,不,它不必被释放。
当然,如果其他东西为其分配了内存,那么,是的,该内存最终应该被释放,但这与strcpy
.
前面的语句似乎是这种情况,因为您的定义是字符指针数组而不是字符数组:
char* buffer[LEN];
这几乎肯定会通过以下方式完成:
buffer[n] = malloc (length);
开始考虑分配内存的责任是一个好主意。我的意思是,传递一个 malloc 的内存块也可能涉及传递在某个时候释放它的责任。
您只需要弄清楚(或决定,如果它是您的代码)管理内存的责任是否与内存本身有关。使用strcpy
,即使您为目的地传递了一个已经分配好的块,责任也没有被传递,因此您仍然必须自己释放该内存。这使您可以轻松地传入 malloc'ed 或 non-malloc'ed 缓冲区,而不必担心它。
您可能在想,strdup
这基本上是通过首先为其分配内存来复制字符串。从那里返回的字符串肯定需要被释放。
如果你使用
char buffer[6];
strcpy(buffer, "hello");
例如,当缓冲区到达其作用域的末尾时,它就会被释放。
另一方面,
char *buffer;
buffer = malloc(sizeof(char) * 6);
strcpy(buffer, "hello");
这样你需要释放你分配的内存。
但它实际上与 strcpy 没有任何关系,仅与您如何分配字符串有关。
您为 strcpy 提供了一个指向目标缓冲区的指针,因此它取决于您如何分配该缓冲区,以及是否需要释放它以及如何释放它。
例如,如果您使用 malloc 分配缓冲区,那么是的,您需要释放它。如果你在堆栈上分配了缓冲区,那么你不会,它会在超出范围时自动释放。
该strcpy
函数将字符串复制到您需要以其他方式获取的缓冲区中(例如malloc
);您应该使用适合您分配方式的任何机制来释放该缓冲区。
strcpy()
不创建字符串,它只复制一个字符串。内存分配与该过程完全分离。
因此,您必须注意将字符串复制到的内存 - 如果它是动态分配的,您必须在某个时候释放它。由于您似乎有一个堆栈分配的缓冲区,因此您不必做任何特别的事情 - 缓冲区超出范围时将被回收。