如果我不包含HeapAlloc,我的程序会出错。究竟发生了什么,我无法理解。
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 :(得分:4)
第二行为Str_Dump[iIndex]
分配内存。 HeapAlloc
和GetProcessHeap
是WinApi方法,您可以在MSDN网站上找到他们的文档。
第一行崩溃是因为您正在访问未分配的指针 - Str_Dump[iIndex]
。
答案 1 :(得分:3)
嗯,根据我们可以看到的内容,Str_Dump
看起来像是一个指向slog
个对象的数组。当然,如果你没有为那些指向指针的对象创建slog
对象(这就是HeapAlloc
调用的作用),那么坏事就会发生。有什么不明白的?