c - 释放动态分配的内存

标签 c free

int i;
char *s = (char*)malloc(sizeof(char)*10);
for(i = 0; i <= 4; ++i)
    s[i] = 'a';
s[5] = '\0';
printf("%s\n", s);
free(s).

上面的代码会不会有内存泄露的问题?功能如何 “free”知道需要释放多少内存吗?

最佳答案

您的代码中没有内存泄漏。关于你的第二个问题,当你调用malloc ,发生的不仅仅是将内存还给你。 C 库保留一些空间来放置它自己的标题和簿记信息,以便在您调用 free 时使用。它可以做正确的事。

关于您的代码的一些编辑注释:

  • 您不需要转换 malloc() 的返回值在 C 程序中。 void * 之间的转换(malloc() 返回)和其他指针类型在 C 中是隐式的。

  • sizeof(char)1 , 为什么要写出来呢?

  • 您的循环将三个字符写入 s , 然后你的程序在添加 s[4] 之前跳过一个字符 ( \0 ) .这有点奇怪。你是不是想用 i <= 4在你的循环中,或者可能是s[4] = '\0'之后呢?

  • 你有一个 .而不是 ;在你的 free() 之后称呼。我想这只是这里的错字,而不是你的程序中的错字,因为它不会那样编译。

关于c - 释放动态分配的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14450414/

相关文章:

c - 在 C 中调试堆栈溢出?

c - C 中的指针问题

c - 错误 : expected identifier or ‘(’ before, 宏定义

使用 ICU 将 UCS-2 字符串转换为 UTF-8

python - 如何知道内存地址是否被使用?

objective-c - 自由函数在 c/objective-c 中不起作用

c - 释放 void 指针数组的元素

c - 关于C中内存分配的问题

c - 快速乘法

c++ - 不释放 C 数组中的内存