god*_*lla 10 c malloc buffer buffer-overflow
我有一个缓冲区,想要做一个测试,看看缓冲区是否有足够的容量,我可以找到我可以添加到缓冲区的元素数量.
char *buffer = (char *)malloc(sizeof(char) * 10);
Run Code Online (Sandbox Code Playgroud)
做一个
int numElements = sizeof(buffer);
Run Code Online (Sandbox Code Playgroud)
不回10,有关如何实现这一点的任何想法?
小智 24
对于GNU glibc:
SYNOPSIS
#include <malloc.h>
size_t malloc_usable_size (void *ptr);
Run Code Online (Sandbox Code Playgroud)
描述
malloc_usable_size()函数返回ptr指向的块中的可用字节数,指向malloc(3)或相关函数分配的内存块的指针.
Ker*_* SB 14
你不能做这样的测试.记住您分配了多少内存是您自己的责任.如果缓冲区是由其他人提供给您的,请求他们传递大小信息,并让他们负责传递正确的值或让程序死掉.
由于buffer是指针(不是数组),sizeof操作符返回指针的大小,而不是指向它的缓冲区的大小.没有标准的方法来确定这个大小,所以你必须自己做簿记(即记住你分配了多少.)
顺便说一句,它是一样的
char *p = "hello, world\n"; /* sizeof p is not 13. */
Run Code Online (Sandbox Code Playgroud)
有趣的是,
sizeof "hello, world\n"
Run Code Online (Sandbox Code Playgroud)
是14.你能猜到为什么吗?
buffer只是一个没有大小信息的指针.但是malloc()例程将保持你所做的分配的大小,所以当你释放它时,它会释放适当的空间量.因此,除非您想深入了解malloc()功能,否则我建议您自己保存分配的大小.(有关可能的实现,请参阅其他API答案中的示例).
| 归档时间: |
|
| 查看次数: |
50580 次 |
| 最近记录: |