C,C++指针 赋值的一个疑问

const HDDINFO_BASE* p = ((HDDINFO_BASE*)(pFather->m_HddBaseInfo.strSerialNumber));
memcpy(&(pPj->m_PjInfo.HddInfo), &(pFather->m_HddBaseInfo), sizeof(HDDINFO_BASE));

问题:赋值后,p指针指向的内存地址和&(pFather->m_HddBaseInfo)地址及(pFather->m_HddBaseInfo.strSerialNumber)的地址不一样(偏移了7个字节或15个字节)!导致memcpy失败!会是怎么的情形导致赋值操作都会发生这样的错误呢?

附上结构体:
#pragma  pack(1) 

typedef struct HDDINFO_BASE
{
char strSerialNumber[22];
char strModelNumber[42];
char strFirmVersion[10];
char strSATAType[10];
char strCacheSize[20];
char strRPM[5];
WORD majorVersion;
bool islocked;
INT64 sectors;
HDDINFO_BASE()
{
memset(strSerialNumber, 0, sizeof(strSerialNumber));
memset(strModelNumber, 0, sizeof(strModelNumber));
memset(strFirmVersion, 0, sizeof(strFirmVersion));
memset(strSATAType, 0, sizeof(strSATAType));
memset(strCacheSize, 0, sizeof(strCacheSize));
memset(strRPM, 0, sizeof(strRPM));
majorVersion = 0;
islocked = false;
sectors = 0;

}
}HDDINFO_BASE;

赋值代码没有啊,是不是赋值时出了错?