Unhandled exception in ***.exe(MSVCRTD.DLL):OxC0000005 Access Violation”的错误提示信息。

烟蝶飞炫 2012-05-10 05:51:33
程序是基于Winpcap网络数据捕获系统实现的,在运行中出现了问题
其界面是可以运行的,在我点击捕获出来的某一条包信息时,出现了相关问题具体如下:

首先提示内存不足,然后出现了“Unhandled exception in ***.exe(MSVCRTD.DLL):OxC0000005 Access Violation”的错误提示信息。

在进行调试的时候出现问题如下:
Loaded symbols for 'D:\Program Files\Microsoft Visual Studio\MyProjects\Sniffer\Debug\Sniffer.exe'
Loaded 'C:\WINDOWS\system32\ntdll.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\kernel32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\user32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\gdi32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\wpcap.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\ws2_32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\advapi32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\rpcrt4.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\secur32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\msvcrt.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\ws2help.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\packet.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\WanPacket.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\npptools.dll', no matching symbolic information found.
。。。。。。
这里显示有很多dll文件没有匹配,这是由什么原因引起的,具体要怎么解决,急求各位高手指点!!!
...全文
960 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
烟蝶飞炫 2012-05-14
  • 打赏
  • 举报
回复
调用出错的函数,具体是那些函数呢?
烟蝶飞炫 2012-05-13
  • 打赏
  • 举报
回复
如果我把显示的信息设在60条以内,它就不会出错。。。
烟蝶飞炫 2012-05-13
  • 打赏
  • 举报
回复
那要怎么改呢。。。我不会改啊
mars_man 2012-05-12
  • 打赏
  • 举报
回复
…………………………, no matching symbolic information found.
只是说没有对应的调试符号信息而已,不是说少dll,要是真少了dll,程序启动都是问题,何来运行出错?

开调试器对源码调试吧。
unituniverse2 2012-05-12
  • 打赏
  • 举报
回复
容量崩溃会提示stack overflow异常的。你那个不是
烟蝶飞炫 2012-05-12
  • 打赏
  • 举报
回复
哦,我试了试,可能是数组容量不够,信息没处放,导致容量崩溃吧!一直没找到解决办法。。。
unituniverse2 2012-05-12
  • 打赏
  • 举报
回复
那个错误信息是因为:
调用了winpcap里的函数,但是函数返回失败。然后调用这个函数的人没有检查返回值,直接访问了指针。因为winpcap里的函数在没有成功的时候并不改写你传给它的指针,结果当然你访问的就是个野指针。于是抛出访问冲突异常。。。
烟蝶飞炫 2012-05-11
  • 打赏
  • 举报
回复
在底下控制台调试栏里显示的就是缺少很多.dll文件,而且都是在系统文件中缺少的,就是我上面列出来的一部分。
--我是个非常菜的菜鸟,太高级了我听不懂,大侠你能帮我看一下要怎么解决?我已经纠结很久了。。。
rularys 2012-05-11
  • 打赏
  • 举报
回复
那个 “Temp.exe”: 已加载“C:\WINDOWS\system32\ntdll.dll”,Cannot find or open the PDB file
其实和
Loaded 'C:\WINDOWS\system32\ntdll.dll', no matching symbolic information found
是一个意思,这不是引起你的程序崩溃的原因。这只是调试器在查找调试符号时找不到而给出的信息,和你的程序不相关,更不会影响你的程序
rularys 2012-05-11
  • 打赏
  • 举报
回复
而这时调试器给出的异常调用栈信息的一部分:
> Temp.exe!sub1() 行 7 + 0x3 字节 C++
Temp.exe!sub2() 行 13 C++
Temp.exe!sub3() 行 18 C++
Temp.exe!main() 行 23 C++
Temp.exe!__tmainCRTStartup() 行 555 + 0x19 字节 C
Temp.exe!mainCRTStartup() 行 371 C

上面的就是调用栈了,栈顶是: Temp.exe!sub1() 行 7 + 0x3 字节
sub1()行 7 + 0x3 字节 的位置正是代码 : int j = *p; //运行到这里会出现异常
栈中的第二个函数是sub2() 这时说出现异常时,是sub2()调用了sub1(),正如代码中看到的一样,而sub2()额调用者是sub3(),sub3()的调用者是main(),main()额调用者是__tmainCRTStartup(),... 和就是调用栈,它能给出函数的调用情况。你如果看到这个调用栈,那么就能从 MSVCRTD.DLL 一直追溯到你写的代码,检查是哪一个函数在调用VC库(MSVCRTD.DLL),把错误的参数传递到了VC库中
rularys 2012-05-11
  • 打赏
  • 举报
回复
俺不是什么大侠

给你个例子:

void sub1()
{
// 空指针
int *p = nullptr;
int j = *p; //运行到这里会出现异常
}

void sub2()
{
sub1();
}

void sub3()
{
sub2();
}

int main(void)
{
sub3();
return 0;
}


在调试器里面的输出:

“Temp.exe”: 已加载“E:\***\VS2010 Projs\Temp\Debug\Temp.exe”,已加载符号。
“Temp.exe”: 已加载“C:\WINDOWS\system32\ntdll.dll”,Cannot find or open the PDB file
“Temp.exe”: 已加载“C:\WINDOWS\system32\kernel32.dll”,Cannot find or open the PDB file
“Temp.exe”: 已加载“C:\WINDOWS\system32\msvcr100d.dll”,已加载符号。
Temp.exe 中的 0x004113e8 处最可能的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突
“Temp.exe”: 已加载“C:\WINDOWS\system32\apphelp.dll”,Cannot find or open the PDB file
Temp.exe 中的 0x004113e8 处有未经处理的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突

上面的“Temp.exe 中的 0x004113e8 处有未经处理的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突”
就是异常信息 :0x004113e8 表示出现异常的代码地址,0xC0000005 是异常代码,这个代码代表的异常就是“Access Violation”
这个和你所说的异常就是同一种异常:
Unhandled exception in ***.exe(MSVCRTD.DLL):OxC0000005 Access Violation
rularys 2012-05-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

下面的那一堆问题就是由“Unhandled exception in ***.exe(MSVCRTD.DLL):OxC0000005 Access Violation”这个问题引起的,是系统问是否要调试后,转到那儿滴。还有你说的那个调用栈信息是在哪儿看呢?我不知道这是由什么原因引起的,要到什么地方看?
[/Quote]

如果你启动了调试器,调试器就会在把异常信息显示出来。
调试器如果是VS 的 IDE,那么在"调试"->"窗口"里面就有个调用栈(call stack)窗口,可以把它调出来。如果是别的调试器,那么去看调试器手册,至少你要了解一些基本的调试知识才好解释
烟蝶飞炫 2012-05-10
  • 打赏
  • 举报
回复
下面的那一堆问题就是由“Unhandled exception in ***.exe(MSVCRTD.DLL):OxC0000005 Access Violation”这个问题引起的,是系统问是否要调试后,转到那儿滴。还有你说的那个调用栈信息是在哪儿看呢?我不知道这是由什么原因引起的,要到什么地方看?
rularys 2012-05-10
  • 打赏
  • 举报
回复
可怜的娃
这一堆的问题啊

下面这一堆问题不严重,"no matching symbolic information found."只是个提示: 调试系统找不到相应的符号文件,所以调试的时候不能看到代码的符号信息,不过不妨碍调试系统的正常运行。

“Unhandled exception in ***.exe(MSVCRTD.DLL):OxC0000005 Access Violation”这个问题就严重了,你应该在调试系统启动后看看它的提示信息:异常的地址,还有调用栈信息,在调用栈里说不定能找到你熟悉的符号名——如果有,仔细检查那个函数~
烟蝶飞炫 2012-05-10
  • 打赏
  • 举报
回复
有啊!点击确定后,自动进入了调试页面,里面显示系统文件中缺少了很多dll文件,就是我在上面列出来的一部分。
W170532934 2012-05-10
  • 打赏
  • 举报
回复
然后你有没有点击重试按钮,查看什么地方ACCESS ERROR呢??

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧