日期:2014-05-16  浏览次数:20610 次

这是C++中的一段程序,请大家帮忙看看,有两个地方看不懂?
st_obj *ptr;
//ptr->n,比1大
for(int i = 0; i < ptr->n; i++){

ptr->data_[i].camp_id....);//data_[0],怎么能这么使用呢?数据越界了啊

}

struct st_obj {
char id[60];
int n;
struct {
U64 ll_id;
int counst;
} data_[0];

inline U32 Size() {return sizeof(*this)+n*sizeof(data_[0]);}//这个函数有什么用吗?这么写有什么意义?
};
------解决方案--------------------
柔性数组,只是为了索引,实际内存分配是不止那么大的。
------解决方案--------------------
1、越界了是越界了,指是越界访问,数据还是没变越界的,这种情况一般用在st_obj *ptr;指向的地方的长度一开始未知。通信中广泛使用
2、U32 Size就是返回真是长度啊。n表示后面加了多少个data_的结构体。
------解决方案--------------------
st_obj.size() 的时候调用它啊。size是成员函数。
------解决方案--------------------
引用:
st_obj.size() 的时候调用它啊。size是成员函数。

这就好像类的成员函数,方便调用,可以直接显示结构体大小。