Meine Programme gibt einen Fehler, wenn ich HeapAlloc nicht einschließen. Was genau passiert, kann ich nicht verstehen.0xC0000005: Zugriffsverletzung in location schreiben
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;
Aber als ich zählen die Linie
Str_Dump[iIndex]=(StrLog)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(slog));
wieder führen Sie das Programm läuft erfolgreich.
Was genau macht diese Linie? Ich kann nicht verstehen.
Ich habe erklärt strdump als
StrLog Str_Dump[100];
Haben Sie Platz für Str_Dump reserviert? es ist unklar von diesem Code, wenn dies getan wird – PeskyGnat
@PeskyGnat strdump Deklaration ist wie StrLog Str_Dump [100]; – hardyz009
@ hardyz009 Ja, aber "StrLog" ist ein Zeiger, so dass Sie nur ein Array von Zeigern haben. Sie müssen Speicher zuweisen und diese Zeiger initialisieren, damit sie auf etwas zeigen. (Oder, Sie könnten ein Array von 'Slog' anstelle von Zeigern zu einem' Slog' deklarieren. Außerdem verdeckt die Eingabe von defend die Tatsache, dass 'StrLog' ein Zeiger ist, und sollte in den meisten Fällen vermieden werden) – nos