typedef struct {
unsigned int  RecordID;
unsigned int  NKFileNUM;
unsigned int  NKFileWriteNUM;
unsigned int  NKAllByte;
unsigned char TagFKFlag;
unsigned char PrintNKFlag;
unsigned char SendStopFlag;
}SeekBody_T; 
SeekBody_T *pSeekBody=NULL; //全局变量void SeekInit()
{
pSeekBody=(SeekBody_T*)malloc(sizeof(U8)*(60*sizeof(SeekBody_T)));}void SeekFunc()
{
unsigned int a = 0;
a = pSeekBody[3].RecordID;//当前pSeekBody[3].RecordID值等于4//这条语句执行后a的值仍然是0}请问这是为什么呢? 

解决方案 »

  1.   

    如果你确定pSeekBody[3].RecordID的值为4,理论上是不可能的,
    将结构定义之前与之后加上 #pragma pack(1) 与 #pragma pack() 再试下吧
      

  2.   

    谢谢您,我试了一下,还是不行。
    在二进制下查看是这样的
    00FAE355   mov         ecx,dword ptr _pSeekBody (032b93b0)[eax]他使用_pSeekBody来进行的操作,_pSeekBody是VC自动生成的,是指向pSeekBody的指针,所以就不正确了
    但我不知道如何改.
      

  3.   

    //当前pSeekBody[3].RecordID值等于
    LZ是如何判断当前的值的,你是赋值了还是设了断点
      

  4.   

    那这样写会怎么样呢
    pSeekBody[3].RecordID = 4;
    unsigned int a = 0;
    a = pSeekBody[3].RecordID;//当前pSeekBody[3].RecordID值等于4
      

  5.   

    这是不可能发生的,当前pSeekBody[3].RecordID值一定不等于4
      

  6.   

    我试了一下,这样写也不好使,他依然是5 。那这样写会怎么样呢
    pSeekBody[3].RecordID = 5;
      

  7.   

    我已经改好了, 是extern 的声明不正确