我有一段代码,是由一个非常老派的程序员编写的 :-) 。它的大致内容如下:
typedef struct ts_request
{
ts_request_buffer_header_def header;
char package[1];
} ts_request_def;
ts_request_def* request_buffer =
malloc(sizeof(ts_request_def) + (2 * 1024 * 1024));
该程序员基本上是在处理缓冲区溢出的概念。我知道这段代码看起来可疑,所以我的问题是:
malloc
函数是否总是分配连续的内存块?因为如果这段代码中分配的块不是连续的,那么代码将会崩溃。执行
free(request_buffer)
,是否会释放由malloc
分配的所有字节,即sizeof(ts_request_def) + (2 * 1024 * 1024)
, 还是只会释放结构体sizeof(ts_request_def)
的大小的字节?您是否发现这种方法存在任何明显的问题?我需要与老板讨论并指出这种方法的任何漏洞。
+
,这显然是荒谬的。 - Jim Balter