c-内存利用不足是否会导致内存泄漏



当我们将较少数量的数据复制到较大的(分配的编译时间(缓冲区时,strncpy()是否会导致内存泄漏?换句话说,内存利用率不足是否可以称为存储器泄漏

下面是我的代码

#define uk "ln"
int main()
{
  char buffer[32];
  strncpy(buffer,uk,sizeof(buffer));// IS it memory leak free?
                                    // uk macro has 3 byte of size to
                                    // hold the string but here the
                                    // Attemp of 32 byte is made to copy
                                    // from uk macro to buffer?
}  

以上代码中是否存在内存泄漏或错误?

内存泄漏

,没有内存泄漏。时期

如果您自己不分配内存(动态(,也不需要释放。编译器在编译时分配的所有内存,编译器将负责释放这些内存。我们现在可以玩得开心了。

Bug

,您没有包括string.h,它包含strncpy()的正向声明。

事实上,这两条语句

char buffer[32];
strncpy(buffer,uk,sizeof(buffer));

完全等同于以下声明

char buffer[32] = "ln";

这是一个有效的声明,没有错误或内存泄漏。:(

在这两种情况下,未通过字符串文字的字符(或通过复制其字符(初始化的buffer的所有元素都是零初始化的。

来自C标准(7.23.2.4 strncpy函数(

3如果s2指向的数组是短于n的字符串字符,空字符将附加到数组中的副本由s1指向,直到总共写入了n个字符

一般来说,写会更正确

char buffer[32];
strncpy(buffer,uk,sizeof(buffer));
buffer[sizeof( buffer )-1] = '';

这就是你的原始代码是不安全的。

当然,C中的头<string.h>或C++中的<cstring>必须包含在内,但我认为您只是忘记了为示例执行此操作。:(。

没有内存泄漏,因为buffer是一个自动变量。它在退出main()时停止存在。

相关内容

  • 没有找到相关文章

最新更新