用“strcpy”创建的字符串需要释放吗?

问题描述 投票:0回答:5

使用 'strcpy' 创建的字符串是否需要释放?以及如何释放它?

编辑:目的地是这样分配的:

char* buffer[LEN];
c strcpy
5个回答
26
投票

strcpy
函数本身不会为目标字符串分配内存,所以,不,它不必被释放。

当然,如果 else 为其分配了内存,那么该内存最终应该被释放,但这与 strcpy

没有任何关系。

前面的陈述似乎是这样,因为您的定义是字符数组

指针而不是字符数组:

char* buffer[LEN];
几乎可以

肯定通过以下方式完成:

buffer[n] = malloc (length);
开始考虑动态分配内存的责任是个好主意。我的意思是,传递这样的内存块也可能涉及传递在某个时刻释放它的责任。

您只需要弄清楚(或者决定,如果这是您的代码)管理内存的责任是否与内存本身有关。

例如,当调用

strcpy

 时,即使您为目标传递动态分配的块,责任是 
被传递,因此您仍然必须自己释放该内存。这使您可以轻松地传入动态分配的块或其他类型的缓冲区,而不必担心它。

您可能会想到

strdup

,它基本上是通过首先为其分配内存来复制字符串。从那里返回的字符串肯定需要被释放。
    


8
投票
如果您使用

char buffer[6]; strcpy(buffer, "hello");

例如,当到达其范围末尾时,缓冲区将被释放。

另一方面,

char *buffer; buffer = malloc(sizeof(char) * 6); strcpy(buffer, "hello");

这样你需要释放你分配的内存。

但它实际上与 strcpy 没有任何关系,只与如何分配字符串有关。


5
投票
您为 strcpy 提供了一个指向目标缓冲区的指针,因此这取决于您如何分配该缓冲区以及是否需要释放它以及如何释放它。

例如,如果您使用 malloc 分配了缓冲区,那么您将需要释放它。如果您在堆栈上分配缓冲区,那么不,您不会,当它超出范围时,它将自动释放。


2
投票

strcpy

函数将字符串复制到您需要通过其他方式获取的缓冲区中(例如
malloc
);您应该使用适合您分配方式的任何机制来释放该缓冲区。


1
投票

strcpy()

 不会创建字符串,它只会复制字符串。内存分配与该进程完全分离。

因此,您必须处理字符串复制到的内存 - 如果它是动态分配的,您必须在某个时候释放它。由于您似乎有一个堆栈分配的缓冲区,因此您不必执行任何特殊操作 - 当缓冲区超出范围时将被回收。

© www.soinside.com 2019 - 2024. All rights reserved.