- 主题:同事间因为一个问题差点吵起来了
你就问同事一个问题,两级结构都是动态的,那他申请内存的长度,要怎么确定?sizeof那个结构还要不要乘,乘的话就看不对了,不乘的话又何必。
【 在 flyren911 的大作中提到: 】
: 今天同事因为这个事差点吵起来了,事情是这样的:
: 两个process之间通过信号通信,A发了一个动态信号给B,B需要用一个静态数据结构保存下来在本地处理。信号数据结构简化了一下,看起来像这样,portCap的长度是动态的,band的长度也是动态的。
: typedef struct bandType
: ...................
--
FROM 115.192.110.*
楼主的是char data[MAX_LEN];
只要MAX_LEN能保证比双方协商的最大数据字节更大就行了,一次malloc即可,至于data里具体数据就留着慢慢解析。
他同事那个portCapT portCap[MAX_NUM];
算什么?就算MAX_NUM比双方协商的可能最多的portCapT数量更大,然而每个portCapT结构里的bandTypeT又是变长的,所以这个结构直接申请,肯定内存不够。为了让内存够,那个MAX_NUM实际上必须等于MAX_LEN/sizeof(bandTypeT),然而这样转一道又何必呢?不如楼主直接规定最大字节来的简单明了。而且像楼主说的,那个可变数组的下标,取过来之后,内存不是内存,指针又不是指针,就是给维护的人挖坑啊。
【 在 slowaction 的大作中提到: 】
: 你问得这个问题
: 楼主的结构也处理不了
: 他的方式比对方好
: ...................
--
FROM 115.192.110.*
就事论事,楼主他们已经走这条路了,那么接下来哪两条岔路更好而已,你们非要说你就不该走到这里来,那有什么意义
【 在 slowaction 的大作中提到: 】
: 你每次都申请最大的,你搞这种变长数据结构干什么呢
: 白白增加了理解成本
--
FROM 112.17.236.*
他的意思可能是,内存该咋分配还是咋分配,放个结构体,让用的人知道应该怎么cast。
他的出发点也是有道理的,但是这种情况应该用指针数组。
【 在 flyren911 的大作中提到: 】
: 问题就在这里,我们都觉得你定义了portCapT[],就表示里面装的是固定长度的portCapT数据,但是貌似我同事不认可,他说portCapT[]就是提供空间的作用。
--
FROM 115.192.109.*