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。
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。