0xC0000005:在位置写入访问冲突

时间:2012-04-12 12:13:46

标签: c++ c visual-studio-2008

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

2 个答案:

答案 0 :(得分:4)

第二行为Str_Dump[iIndex]分配内存。 HeapAllocGetProcessHeap是WinApi方法,您可以在MSDN网站上找到他们的文档。

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

答案 1 :(得分:3)

嗯,根据我们可以看到的内容,Str_Dump看起来像是一个指向slog个对象的数组。当然,如果你没有为那些指向指针的对象创建slog对象(这就是HeapAlloc调用的作用),那么坏事就会发生。有什么不明白的?