끝 부분에 나와있는 코드를 실행하는 동안, 나는 마지막 줄 FREE(pTcpTable);
에서 휴식을 얻고 난 계속하면이 오류가 나타납니다 : 0x7737096E에서메모리 할당/오류를 해제 (매우 작은 코드)
"처리되지 않은 예외 (ntdll.dll)에서 netMon.exe : 0xC0000005 : 액세스 위반 읽기 위치 0x00000009. "
crt0dat.c가 열리고이 코드가 표시됩니다 :
void __cdecl __crtExitProcess (
int status
)
{
__crtCorExitProcess(status);
/*
* Either mscoree.dll isn't loaded,
* or CorExitProcess isn't exported from mscoree.dll,
* or CorExitProcess returned (should never happen).
* Just call ExitProcess.
*/
ExitProcess(status);
}
이것은 코드입니다 : 간단한 메모리 할당 및 할당 취소
#include <iostream>
#include <WinSock2.h>
#include <IPHlpApi.h>
#include <Ws2tcpip.h>
using namespace std;
#pragma comment(lib, "iphlpapi.lib")
#pragma comment(lib, "ws2_32.lib")
#define MALLOC(x) HeapAlloc(GetProcessHeap(), 0, (x))
#define FREE(x) HeapFree(GetProcessHeap(), 0, (x))
int __cdecl main()
{
PMIB_TCPTABLE_OWNER_PID pTcpTable;
DWORD tcpTableSize = 0;
char szLocalAddr[128];
struct in_addr IpAddr;
pTcpTable = (PMIB_TCPTABLE_OWNER_PID)MALLOC(sizeof(MIB_TCPTABLE_OWNER_PID));
if(pTcpTable == NULL)
return 1;
tcpTableSize = sizeof(MIB_TCPTABLE_OWNER_PID);
if(GetExtendedTcpTable(pTcpTable, &tcpTableSize, FALSE, AF_INET, TCP_TABLE_OWNER_PID_CONNECTIONS, 0) == ERROR_INSUFFICIENT_BUFFER)
{
FREE(pTcpTable);
pTcpTable = (PMIB_TCPTABLE_OWNER_PID)MALLOC(sizeof(tcpTableSize));
if(pTcpTable == NULL)
return 1;
}
if(GetExtendedTcpTable(pTcpTable, &tcpTableSize, FALSE, AF_INET, TCP_TABLE_OWNER_PID_CONNECTIONS, 0) == NO_ERROR)
{
for(DWORD i = 0; i < pTcpTable->dwNumEntries; i++)
{
IpAddr.S_un.S_addr = (u_long)pTcpTable->table[i].dwRemoteAddr;
InetNtop(AF_INET, &IpAddr, szLocalAddr, 128);
}
}
if(pTcpTable != NULL)
FREE(pTcpTable);
return 0;
}
내가 무슨 잘못 여기 알아낼 수 없습니다, 친절하게 도와주세요!
가 [Valgrind의 (http://valgrind.org/) 같은 것들을 잡기에 아주 좋은 를 할당 할 필요가 여기에있다 이. – kichik