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

时间:2015-01-09 08:43:17

标签: c free

char *str;
int length = 100;  
str = (char *)malloc(sizeof(char) * (length+1));
*str = '\0';

free(str);  

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

4 个答案:

答案 0 :(得分:2)

Strlen返回零,因为在分配内存后,指针的起始值为'\0'。因此检查strlen直到出现空字符。所以返回值为零。

答案 1 :(得分:1)

strlen将为您提供C字符串的长度,而不是缓冲区的大小。

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

然而,malloc()例程将保留您所做分配的大小,因此当您free()时,它会释放适当的空间。

您可以根据需要跟踪内存的大小(请参阅Using sizeof with a dynamically allocated arrayIs 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);

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

答案 2 :(得分:1)

字符串的长度(由strlen()计算)与内存分配的大小无关。 free()无法根据strlen()确定返回堆的字节数。在后台处理将释放一块内存大小的簿记。

答案 3 :(得分:0)

free()需要 void * ,类似void * malloc()系列函数返回。因此它将释放分配的内存量,而不管放置 \ 0 分隔符的位置。

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