|
发表于 2007-10-12 23:07:49
|
显示全部楼层
并非这样, free并不是根据指针类型来释放内存的,malloc申请的内存块与类型无关,类型是申请者考虑的因素, malloc只关注申请内存的大小。see man free
- [b]void *[/b]malloc(size_t size);
- void free([b]void *ptr[/b]);
复制代码
数组为0的例子,能想到比较而且需要的例子是通信的领域。 一个数据包括头部(header)和数据(payload), 头部一般有一字段指定数据长度。 但有时并没有数据要发送,为了让对端知道自己还是正常的,通信没有中断,可以发一个空包,在处理时可以用0大小的数组来表示空包。
一般如果不支持0大小数组的系统,在结构体定义的时候, 可以定义一个最小的数组(如数组大小为1),不过如果要发的是空包时, 这个大小为1的数组已经浪费了一些内存,在大容量的嵌入式系统的,这些浪费内存的相当宝贵。 至于数组越界,那是程序员要注意的事情,根数组大小是不是0没有什么关系。
以下的结构理论上也可以,但处理上已经不方便了, header 和 payload已经分离了。发送数据得根据payload或length的值调用两次memcpy 把要发送的数据复制到发送缓冲区。
- struct
- {
- unsigned int length;
- char* payload;
- }
复制代码 |
|