char指针会被释放吗?是否有一些代码可以证明免费确实有效

will the char pointer be freed? is there some code can prove the free does work well

char *str;
int length = 100;  
str = (char *)malloc(sizeof(char) * (length+1));
*str = '[==]';

free(str);  

strcpy strlen 不起作用, 我试过表达式 strlen(str);结果为 0。
会免费工作吗? 如果 free now 工作,它可能是很多内存泄漏。

Strlen return 为零,因为在分配内存后,您使指针的起始值为 '[=10=]'。所以 strlen 一直检查直到出现空字符。所以 return 值为零。

strlen 会给你 C 字符串的长度而不是缓冲区的大小。

C 字符串的长度为determined by the terminating null-character:C 字符串的长度等于字符串开头和终止空字符之间的字符数(不包括终止空字符本身)。所以 0 是正确答案。

然而 malloc() routine will hold the size of the allocation you made so when you free() 它释放了适量的 space。

如果需要,您可以自行跟踪内存大小(请参阅 Using sizeof with a dynamically allocated array and Is it possible to find the Memory Allocated to the Pointer, without searching for the malloc statement)。

使用 gcc / glibc 你有 malloc_usable_size 函数(不包括在 POSIX.x / C90 / C99 / C11 中):

#include <malloc.h>

size_t malloc_usable_size (void *ptr);

returns ptr指向的块中的可用字节数。

字符串的长度(由strlen()计算)与内存分配的大小无关。 free() 并没有根据strlen() 来确定return 到堆的字节数。将释放多少内存块的簿记是在幕后处理的。

free() 需要一个 void * 并且类似地 void *malloc( ) 家族职能。因此它将释放分配的内存量,而不管您放置 \0 定界符的位置如何。

strlen() 不起作用,因为它计算的字符数最多为 \0 定界符。因为这是您的第零个索引,所以此分隔符之前没有字符,因此返回结果 0。