2012-04-12 85 views
1

我的程序給出了一個錯誤,如果我不包括HeapAlloc.What究竟發生了什麼,我無法理解。0xC0000005:訪問衝突在寫作

int iIndex=0; 

enum EDataType 
{ 
    kINT, 
    kFLOAT, 
    kUINT 
}; 
typedef struct logstr 
{ 
    EDataType sData_Type; 
    string sComment; 
    bool  bStatus; 
    float  fDump_Value; 
    int  iDump_Value; 
    UINT32 uDump_Value; 
}slog,*StrLog; 

Str_Dump[iIndex]->sData_Type=EDataType(0);//i get a error on this line exception0xC0000005: Access violation writing in location0X00000; 

但是,當我包含行

Str_Dump[iIndex]=(StrLog)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(slog)); 

然後再次運行該程序成功地運行。

究竟該做什麼?我不明白。

我宣佈strdump作爲

StrLog Str_Dump[100]; 
+0

你有沒有爲Str_Dump分配空間?從代碼中不清楚這是否正在執行 – PeskyGnat 2012-04-12 12:16:52

+0

@PeskyGnat strdump聲明就像StrLog Str_Dump [100]; – hardyz009 2012-04-12 12:35:54

+0

@ hardyz009是的,但'StrLog'是一個指針,所以你只有一個指針數組。您必須分配內存並初始化這些指針,以便指向某些內容。 (或者,你可以聲明一個'slog'數組而不是指向'slog'的指針,同樣,typedef'ing這樣就隱藏了'StrLog'是一個指針的事實,在大多數情況下應該避免) – nos 2012-04-12 12:52:09

回答

4

第二線Str_Dump[iIndex]分配內存。 HeapAllocGetProcessHeap是WinApi方法,您可以在MSDN網站上找到他們的文檔。

第一行因爲您正在訪問未分配的指針而崩潰 - Str_Dump[iIndex]

+0

我是將strdump聲明爲StrLog Str_Dump [100]; – hardyz009 2012-04-12 12:33:05

+0

@ hardyz009:定義了一百個指針,全部未分配。第一個,'Str_Dump [0]'和最後一個'str_Dump [99]'一樣沒有分配, – MSalters 2012-04-12 13:34:30

3

那麼,基於我們可以看到的,它看起來像Str_Dump是一個指向slog對象的指針數組。當然,如果你不爲這些指針創建slog對象(這就是HeapAlloc調用的作用),壞事情將會發生。什麼不懂?

相關問題