未充分利用的内存会导致内存泄漏吗?

Does under-utilized memory cause memory leak?

当我们将较少数量的数据复制到较大的(编译时分配的)缓冲区时,strncpy() 是否会导致内存泄漏?换句话说,内存的under-utilization是否可以称为memory leak?

下面是我的代码

#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?
}  

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

memory leak?

No,没有内存泄漏。期间.

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

Bug?

,您没有包含 string.h,其中包含 strncpy().

的前向声明

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

后不复存在

其实这两个说法

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

完全等同于以下声明

char buffer[32] = "ln";

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

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

来自C标准(7.23.2.4 strncpy函数)

3 If the array pointed to by s2 is a string that is shorter than n characters, null characters are appended to the copy in the array pointed to by s1, until n characters in all have been written.

一般写成

会更正确
char buffer[32];

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

那是你原来的代码不安全。

当然必须包括 C 中的 header <string.h> 或 C++ 中的 <cstring>,但我认为您只是忘记为演示示例执行此操作。:).