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