调用完回调函数后就出现“0x00000000 处未处理的异常: 0xC0000005: Access violation”错误,如何解决线程同步?

虎了吧唧的银 虎了吧唧的银 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

struct ApcParament
{
CHAR Buffer[512];
DWORD dwDestIP;
};
typedef void * (__stdcall *PIcmpCreateFile)(void);
typedef void * (__stdcall *PIcmpCloseHandle)(HANDLE IcmpHandle);
typedef unsigned long (__stdcall *PIcmpSendEcho2)(HANDLE IcmpHandle,HANDLE Event, FARPROC ApcRoutine, PVOID ApcContext, IPAddr DestinationAddress, LPVOID RequestData, WORD RequestSize, PIP_OPTION_INFORMATION RequestOptions, LPVOID ReplyBuffer, DWORD ReplySize, DWORD Timeout);
void ApcFunc (void *p){
ApcParament * pApcParament=(ApcParament*)p;
ICMP_ECHO_REPLY* P_Icmp_Echo_Option=(ICMP_ECHO_REPLY*)(pApcParament->Buffer);
if(P_Icmp_Echo_Option->RoundTripTime<100000 && P_Icmp_Echo_Option->Address==htonl(pApcParament->dwDestIP))
{
in_addr tmp;
tmp.S_un.S_addr=P_Icmp_Echo_Option->Address;
printf("ip:%s 开启\n",inet_ntoa(tmp));
}
}
DWORD WINAPI IcmpNormalScan(LPVOID pscanParament)
{
scanParament* lpParament=(scanParament*)pscanParament;
ApcParament *ReplyBuffer=NULL;
int NumberOfIP;
HMODULE hInst=LoadLibrary("iphlpapi.dll");
if(!hInst)
{
return -1;
}
PIcmpCreateFile IcmpCreateFile=(PIcmpCreateFile)GetProcAddress(hInst,"IcmpCreateFile");
PIcmpSendEcho2 IcmpSendEcho2=(PIcmpSendEcho2)GetProcAddress(hInst,"IcmpSendEcho2");
PIcmpCloseHandle IcmpCloseHandle=(PIcmpCloseHandle)GetProcAddress(hInst,"IcmpCloseHandle");

if(IcmpCreateFile==NULL||IcmpSendEcho2==NULL||IcmpCloseHandle==NULL)
{
return -1;
}
HANDLE IcmpHandle=0;
IcmpHandle=IcmpCreateFile();//打开ICMP句柄
if(IcmpHandle==0)
{
return -1;
}
else
{

IP_OPTION_INFORMATION IpOption;//该结构用来控制所发ICMP数据包的IP头的相应字段值
IpOption.Flags=0;
IpOption.OptionsData=NULL;
IpOption.OptionsSize=0;
IpOption.Tos=0;
IpOption.Ttl=123;
char *SendData = "hi,I am houhou!";
NumberOfIP=lpParament->dwLastIP-lpParament->dwOriginalIP;
ReplyBuffer=new ApcParament[NumberOfIP];
int i=0;
printf("ICMP Scanning...\n");
for(DWORD dwIP=lpParament->dwOriginalIP;dwIP<=lpParament->dwLastIP;dwIP++,i++)
{
ReplyBuffer[i].dwDestIP=dwIP;
int Res=0;
Res=IcmpSendEcho2(IcmpHandle,
NULL,
(FARPROC)&ApcFunc,
(void*)(&ReplyBuffer[i]),
htonl(dwIP),
SendData,
(WORD)strlen(SendData),
&IpOption,
ReplyBuffer[i].Buffer,
512,
NumberOfIP*200);
// SleepEx(1,true);
}
}
int i=0;
while(1)
{
if(SleepEx(100,true)==WAIT_IO_COMPLETION)
{
}
else
{
i++;
}
if(NumberOfIP*2==i)
{
break;
}
}
IcmpCloseHandle(IcmpHandle);
delete []ReplyBuffer;
return 0;
}
int main(){
scanParament p;
p=GetScanParament();
HANDLE h;
h=CreateThread(NULL,0,IcmpNormalScan,&p,0,NULL);
WaitForSingleObject(h,INFINITE);
CloseHandle(h);
system("pause");
return 0;
}
...全文

相关推荐

IAR 编译错误清单

Error 的问题,具体表现为两次出现相同的内部错误提示:```Internal Error: [CoreUtil/General]: Access violation (0xc0000005) at

poajshlahslihilu

Windows Access Violation at Address 0xC0000005 排查与修复

在Windows系统开发与运维中,内存访问违规是常见的运行时崩溃原因,其异常码0xC0000005对应着虚拟地址空间的非法读写或执行。理解保护模式下页表翻译、权限校验与异常分发机制,是定位此类问题的根基。当程序触发EXCEPTION_ACCESS_VIOLATION时,事件日志、完整转储文件与WinDbg调试器成为还原现场的关键工具,通过分析异常记录、调用栈和模块信息,可快速区分空指针、堆越界、DEP拦截或ASLR冲突等不同成因。针对典型场景,合理配置数据执行保护、处理地址随机化带来的兼容性、启用大地址感知

不靠谱的糖饼

基于jni调用时,jvm报错问题的深入分析

当尝试执行这段代码时,JVM报告了一个致命错误,具体为“EXCEPTION_ACCESS_VIOLATION”,这是一个内存访问错误。错误信息表明在地址0x00000009处发生了非法读取。

weixin_38645434

VS MAP 文件使用

**崩溃信息**: - 运行程序时,会看到类似以下的信息: ``` Unhandled exception at 0x004113b1 in testError.exe: 0xC0000005: Access

酱油肥仔

IAR_6_20编译错误

错误描述:`Tool Internal Error: Internal Error: [CoreUtil/General]: Access violation (0xc0000005)`。

mwttry
评论 14
收藏 已收藏
分享
返回顶部