2012-04-12 53 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调用的作用),坏事情将会发生。什么不懂?

相关问题