打印

数据结构中的成员不能赋值

[复制链接]
1935|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
77muke|  楼主 | 2010-10-9 16:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人在做视频帧数据的写入和读取,在写入的程序中,有如下数据结构,
struct frame_flag  /* 每帧标记,共32个字节 */
{
    int byte_flag;
    enum XESAP_FRAME_TYPE frame_type;
    int frame_date_len;
    struct timeval frame_time;
    void *date;
    int frame_size;
    int frame_seq;
};

程序中对每个成员赋值:
memset(&add_frame_flag, 0 ,sizeof(add_frame_flag));
              add_frame_flag.byte_flag = 0x20100422;
              add_frame_flag.frame_type = tf.dex_p->U.frame.type;
              add_frame_flag.frame_time.tv_sec = tf.dex_p->birthsec.tv_sec;
              add_frame_flag.frame_date_len = tf.dex_p->U.frame.data_len +
              add_frame_flag.frame_seq = 7;
              add_frame_flag.frame_size = 8;
              add_frame_flag.date = tf.dex_p->U.frame.data;
              tf.dex_p->U.frame.data = &add_frame_flag;

但是在读取时发现,这样的每帧的头信息,即32个字节中,这两个值    int frame_size; int frame_seq;都是0。不明白原因,甚是疑惑啊。

也看了很多的关于字节对齐的资料,还是不能解决问题啊。

各位大侠,请多多指教哦。

相关帖子

沙发
mmax| | 2010-10-9 20:49 | 只看该作者
add_frame_flag应该是变量,不是指针。
定义的时候就分配内存了,为何还要 memset(&add_frame_flag, 0 ,sizeof(add_frame_flag));

少个分号,多了个+号。
         add_frame_flag.frame_date_len = tf.dex_p->U.frame.data_len +

使用特权

评论回复
板凳
77muke|  楼主 | 2010-10-11 08:48 | 只看该作者
呵呵,楼上指出的错误很是仔细。这是因为我拷贝上来的失误。
对于add_frame_flag这个结构体变量,memset是为了使结构体中的变量清0 。

使用特权

评论回复
地板
mmax| | 2010-10-11 12:39 | 只看该作者
本帖最后由 mmax 于 2010-10-11 13:04 编辑

那是不是   
add_frame_flag.date = tf.dex_p->U.frame.data;
tf.dex_p->U.frame.data = &add_frame_flag;
这两句引起的,试试去掉?


或者把add_frame_flag.date指针类型改一改。
add_frame_flag.date定义的是void的指针,而要赋值结构体指针。

使用特权

评论回复
5
赤铸| | 2010-10-11 16:10 | 只看该作者
没有上下文,不好判断
自己单步调试,看看刚赋完值后是不是0
一般来说,发现数据“莫名其妙”变了(没有明确赋值却变了),往往是后面的地址越界或非法地址访问把他们修改了

使用特权

评论回复
6
77muke|  楼主 | 2010-10-11 16:37 | 只看该作者
嗯,谢谢楼上的提醒。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

78

帖子

0

粉丝