关于malloc(0)和new T[0]

来源:互联网 发布:ipv4转ipv6软件 编辑:程序博客网 时间:2024/05/16 09:59

//char* ptr = (char*)malloc(0);

上面的用法可以获得整个内存。原因就是c/c++编译器不会做内存越界的检查,但是如果使用free(ptr)则会引起程序中断,原因是这样会破坏编译器的内存管理结构。编译器的内存管理结构大致采用索引表来实现,一般我们在获取内存的时候,内存信息都会存储在这个结构中,所以我们获得的内存可能会比实际需要的内存多一点。这就是为什么malloc(0)不会返回NULL的原因。

//char* ptr = new char[0]的解释也和上面一样。

原创粉丝点击