2015-09-27 149 views
0

我在頭文件中定義了以下結構:C++結構訪問衝突

typedef struct _wfs_cdm_physicalcu 
{ 
    LPSTR   lpPhysicalPositionName; 
    CHAR   cUnitID[5]; 
    ULONG   ulInitialCount; 
    ULONG   ulCount; 
    ULONG   ulRejectCount; 
    ULONG   ulMaximum; 
    USHORT   usPStatus; 
    BOOL   bHardwareSensor; 
} WFSCDMPHCU, * LPWFSCDMPHCU; 

而且在我的代碼文件,我嘗試使用這樣的:

LPWFSCDMPHCU cdm_physical_cass; 
strcpy(cdm_physical_cass->cUnitID, "1234"); 
cdm_physical_cass->lpPhysicalPositionName = "DISP1"; 
cdm_physical_cass->bHardwareSensor = FALSE; 
cdm_physical_cass->ulInitialCount = 100; 

代碼編譯罰款,但是,我得到訪問違反該strcpy,所以我認爲結構沒有正確初始化。 有什麼想法?

+0

下一次產生一個真正的MCVE。那麼你至少知道'strcpy'不是真正的罪魁禍首。 http://stackoverflow.com/help/mcve –

+0

匈牙利符號恐怖:-P。也不要使用'_'作爲前綴。這是爲標準實現保留的。 –

回答

4

cdm_physical_cass未被初始化/分配。 你必須調用

LPWFSCDMPHCU cdm_physical_cass = new WFSCDMPHCU; 

更好的辦法是使用智能指針(如std::unique_ptr)。

+0

謝謝,它的工作。 我早些時候嘗試過,但是像這樣: LPWFSCDMPHCU cdm_physical_cass = new LPWFSCDMPHCU; 有什麼區別? – msbir

+0

'LPWFSCDMPHCU'是'WFSCDMPHCU *'。 – Jarod42

0

由於LPWFSCDMPHCU是一個指針而不是一個結構,因此您需要爲該指針(LPWFSCDMPHCU)分配內存(取決於語言的malloc或new),然後您可以使用這些字段。

1

LPWFSCDMPHCU cdm_physical_cass;不是一個結構,它是指向WFSCDMPHCU類型的結構的指針。您必須爲cdm_physical_cass指向的結構分配內存。建議使用功能WFMAllocateBuffer