Unhandled exception at 0x........ in XXXX.exe: 0xC0000005:Access violation reading location 0x......

Unhandled exception at 0x........ in XXXX.exe: 0xC0000005:Access violation reading location 0x......

对于C++初学者或粗心者,很容易犯如下图所示错误:

那么该错误是由什么造成的呢?

答案无疑只有一个,即:读取了本该没有的值或者地址。

那么如何解决呢?

第一件事,检查下你传入的参数是否合法;
第二件事,若malloc了一块内存,必须记得free;

第三件事,你是否赋值了已经溢出的值或地址。

举例说明:

pOrg = pcPicYuvOrg->getLumaAddr();
	for( y = 0; y < height-1; y++ )
	{
		for( x = 0; x < width-1; x++ )
		{
			Pel A[4];
			//2x2
			A[0]=pOrg[x];	A[1]=pOrg[x+1];
			A[2]=(pOrg+stride)[x];	A[3]=(pOrg+stride)[x+1];

			if( A[0]==255 && A[1]==255 && A[2]==255 && A[3]==255 )
			{
				pOrg[x] = 255;	pOrg[x+1] = 255;
				(pOrg+stride)[x] = 255;	(pOrg+stride)[x+1] = 255;
			}
			else
			{
				pOrg[x] = 0;	pOrg[x+1] = 0;
				(pOrg+stride)[x] = 0;	(pOrg+stride)[x+1] = 0;
			}
			x += 1;
		}
		pOrg += 2*stride;
	}

此代码就会出现上图所示错误。那么如何解决呢?

pOrg = pcPicYuvOrg->getLumaAddr();
	for( y = 0; y < height/2; y++ )
	{
		for( x = 0; x < width-1; x++ )
		{
			Pel A[4];
			//2x2
			A[0]=pOrg[x];	A[1]=pOrg[x+1];
			A[2]=(pOrg+stride)[x];	A[3]=(pOrg+stride)[x+1];

			if( A[0]==255 && A[1]==255 && A[2]==255 && A[3]==255 )
			{
				pOrg[x] = 255;	pOrg[x+1] = 255;
				(pOrg+stride)[x] = 255;	(pOrg+stride)[x+1] = 255;
			}
			else
			{
				pOrg[x] = 0;	pOrg[x+1] = 0;
				(pOrg+stride)[x] = 0;	(pOrg+stride)[x+1] = 0;
			}
			x += 1;
		}
		pOrg += 2*stride;
	}

很明显,错误的原因在于:赋值了已经溢出的值。

若以后遇到类似问题,可以逐步检查上述提出的“三件事情”即可。

时间: 2024-08-02 18:47:03

Unhandled exception at 0x........ in XXXX.exe: 0xC0000005:Access violation reading location 0x......的相关文章

Solve Error: Unhandled exception at 0x00905a4d in xxx.exe: 0xC0000005: Access violation.

在使用Visual Studio进行项目开发的时候,有时候会遇到下面这个错误: Unhandled exception at 0x00905a4d in xxx.exe: 0xC0000005: Access violation 产生这个错误的原因可能是在Visual Studio中链接了后缀为"*.a"的库文件,这种库文件应该是在Linux系统或者是使用MinGW编译时链接的,用VS的话应该链接"*.lib"的库文件,而下载的第三方库中一般会包含"*.d

First-chance exception at 0x782260ec in xxx.exe: 0xC0000005: Access violation

开发的软件可以通过按钮创建子窗体,在win7下测试正常,在winXP下崩溃.于是搜到以下帖子,没有讲到直接解决方法,因为貌似没有直接解决的方式. 通过里边的设置可以捕获异常,然后再分析代码. 原帖地址 'First-chance exception' usually means an exception that has been handled by user code. If you're using the Vosual Studio & the Windows Mobile emulat

Unhandled exception at 0x........ in XXXX.exe: 0xC0000005:错误

对于C++初学者或粗心者,很容易犯如下图所示错误: 那么该错误是由什么造成的呢? 答案无疑只有一个,即:读取了本该没有的值或者地址. 那么如何解决呢? 第一件事,检查下你传入的参数是否合法: 第二件事,若malloc了一块内存,必须记得free: 第三件事,你是否赋值了已经溢出的值或地址. 举例说明: [cpp] view plain copy print? pOrg = pcPicYuvOrg->getLumaAddr(); for( y = 0; y < height-1; y++ ) {

Win10下装 VC6.0单步调试报((OLE32.DLL): 0xC0000005: Access Violation)

想在win10上重温下经典VC++6.0,结果单步调试时弹出个异常对话框,报((OLE32.DLL): 0xC0000005: Access Violation) 解决方法如下: 1.菜单 工具->选项 中的调试,反汇编下的来源注解取消 2.点确定保存设置,然后即可单步调试3.再将工具->选项 中的调试,反汇编下的来源注解勾上 原文地址:https://www.cnblogs.com/yilang/p/12530750.html

&quot;Unhandled exception in app.exe (QtGuid4.dll): 0xC0000005: Access Violation&quot;错误解决

本文要解决的Qt调试问题截图如下: 起因:在代码中添加类型为QColor的二维数组,存储图片每个像素. 现象:调试时出现上图所示错误. 原因:经过百度以及反复查看代码,发现在代码中,有数组越界的情况.因为定义的时候,数组的两个维度大小不一样,而在实 现 QWidget的重画事件时,因为坐标系的差别,使得两个维度的顺序对换,使得发生数组越界的情况. 详细解释:在程序中我定义的数组是QColor color [ Height ] [ Width ], 我的本意是Height代表图片的高度,Heigh

VC++ 0xC0000005: Access violation.

public: COptionDlg(CWnd* pParent = NULL); // 标准构造函数 virtual ~COptionDlg(); TCONFIG m_tCfg; // 对话框数据 enum { IDD = IDD_OPTIONDLG }; 上面的做法会发生报错,感觉是MFC的Bug. 正确做法:将结构体定义在外面,问题解决! public: TCONFIG m_tCfg; public: COptionDlg(CWnd* pParent = NULL); // 标准构造函数

0xC0000005;Access Violation(栈区空间很宝贵, linux上栈区空间默认为8M,vc6下默认栈空间大小为1M)

写C/C++程序最怕出现这样的提示了,还好是在调试环境下显示出来的,在非调试状态就直接崩溃退出. 从上述汇编代码发现在取内存地址 eax+38h 的值时出错, 那说明这个地址非法呗, 不能访问, 一般是访问了空指针引起的. 直接调用QList::append()方法也会出错了, 此时汇编也指向的是在读取内存 ebp-8 时出错. 这段代码运行背景是在栈上申请了很多缓冲区,然后缓冲区在不停添加内容, 直到某一阶段程序崩溃. 由于栈区空间很宝贵, linux上栈区空间默认为8M,vc6下默认栈空间大

unity, Unhandled Exception: System.UnauthorizedAccessException: Access to the path &quot;xxx\Temp\Assembly-CSharp-Editor.dll.mdb&quot; is denied.

Unhandled Exception: System.UnauthorizedAccessException: Access to the path "xxx\Temp\Assembly-CSharp-Editor.dll.mdb" is denied. 在windows上用unity出现上面错误,解法是关掉unity和monodeveloper,然后以管理员身份重新打开unity.

.Net下Unhandled Exception的捕获

C# 处理unhandled Exception方式如下:1.    在程序的Main()方法中增加如下代码.      //处理线程未处理的异常   Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);   //处理系统未处理的异常    AppDomain.CurrentDomain.UnhandledException +=