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