1

如果我不包含 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];
4

2 回答 2

4

第二行为Str_Dump[iIndex]. HeapAlloc并且GetProcessHeap是 WinApi 方法,您可以在 MSDN 网站上找到它们的文档。

第一行崩溃是因为您正在访问未分配的指针 - Str_Dump[iIndex]

于 2012-04-12T12:16:24.500 回答
3

好吧,根据我们所看到的,它看起来像是一个指向对象Str_Dump的指针数组。slog自然,如果您不slog为那些指向的指针创建对象(这就是HeapAlloc调用的作用),就会发生不好的事情。有什么不明白的?

于 2012-04-12T12:17:40.180 回答