Исключение, брошенное на 0x76f96a35 (ntdll.dll) в xxx.exe: 0xc0000005: место записи нарушения доступа
мое приложение выходит из строя с ошибкой
Исключение, брошенное в 0x76F96A35 (ntdll.dll) в xxx.exe: 0xC0000005: нарушение доступа место записи 0x00000014. на линии
DWORD dwRetVal = GetTcpTable2(*table, ¤tTableSize, FALSE);
Что я уже пробовал:
вот мой код
DWORD GetPacketFromProcess(uint16_t localPort, uint32_t localV4Address, PMIB_TCPTABLE2* table, DWORD& currentTableSize) { // We deliberately never permanently free the table on purpose. Eventually, this table will // reach a size where reallocations don't happen anymore, and we can recycle it. if (currentTableSize == 0 ) { currentTableSize = sizeof(MIB_TCPTABLE2); *table = static_cast<PMIB_TCPTABLE2>(malloc(currentTableSize)); } if (*table == nullptr) { currentTableSize = 0; LogError(u8"GetPacketFromProcess(uint16_t, uint32_t, PMIB_TCPTABLE2, DWORD&) - Failed to initialize table."); return 0; } // Exception here //Exception thrown at 0x76F96A35 (ntdll.dll) in xxx.exe: 0xC0000005: Access violation writing location 0x00000014. DWORD dwRetVal = GetTcpTable2(*table, ¤tTableSize, FALSE); if (dwRetVal == ERROR_INSUFFICIENT_BUFFER) { free(*table); *table = nullptr; *table = static_cast<PMIB_TCPTABLE2>(malloc(currentTableSize)); if (*table == nullptr) { currentTableSize = 0; LogError(u8"GetPacketFromProcess(uint16_t, uint32_t, PMIB_TCPTABLE2, DWORD&) - Failed to resize table."); return 0; } dwRetVal = GetTcpTable2(*table, ¤tTableSize, FALSE); } if (dwRetVal == NO_ERROR) { // Table members, spare things like dwOwningPid, are in network order aka big endian. for (DWORD i = 0; i < (*table)->dwNumEntries; ++i) { // The reason why we accept zero as the address is that it is equal to "0.0.0.0:PORT", so // it counts. if ((*table)->table[i].dwLocalAddr == localV4Address) // (*table)->table[i].dwLocalAddr == 0 && localV4Address == 0 || { // See https://msdn.microsoft.com/en-us/library/windows/desktop/aa366909(v=vs.85).aspx // Upper bits may contain junk data. if (((*table)->table[i].dwLocalPort & 0xFFFF) == localPort) { return (*table)->table[i].dwOwningPid; } } } } else { LogError(u8"GetPacketFromProcess(uint16_t, uint32_t, PMIB_TCPTABLE2, DWORD&) - Failed to populate table."); if (*table != nullptr) { free(*table); *table = nullptr; } currentTableSize = 0; } LogError("GetPacketFromProcess(uint16_t, uint32_t, PMIB_TCPTABLE2, DWORD&) - Default. Assuming SYSTEM process."); return 4; }
iam вызывая эту функцию в цикле она считывает данные из сети, plz help
jeron1
Является ли ¤tTableSize правильным? Я не вижу его инициализированным. Что это за странный персонаж (¤)?
Member 14087451
Сэр, это символ амперсанда, возвращаемая таблица GetTcpTable2 и ее размер
jeron1
Это (&) - амперсанд, это ( ¤ ) - нет.