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

2 行目は にメモリを割り当てますStr_Dump[iIndex]HeapAllocおよびGetProcessHeapWinApi メソッドであり、MSDN Web サイトでそれらのドキュメントを見つけることができます。

未割り当てのポインターにアクセスしているため、最初の行がクラッシュします - Str_Dump[iIndex]

于 2012-04-12T12:16:24.500 に答える
3

さて、私たちが見ることができるものに基づいて、それはオブジェクトStr_Dumpへのポインターの配列のように見えslogます. slog当然のことながら、これらのポインターが指すオブジェクトを作成しないと (HeapAlloc呼び出しが行うことです)、悪いことが起こります。理解できないことは何ですか?

于 2012-04-12T12:17:40.180 に答える