0xC0000005: 写入位置 0x00000000 时发生访问冲突的解决办法(转)

上面的意识就是你吧值付给了不该赋给的变量,或者说你把值付给了不能付给的变量(或者常量)

(1)最简单也最直接的错误可能就是scanf()的问题,我们都知道输入的时候都是scanf("%格式",&变量),那么除了字符串(可要&,可不要)之外,所有的输入都需要&,如果你丢了,在很多编译器上变异的时候是查不出来的,也就是说是没有错的,但是输入数据会差生上述错误,是因为写成scanf("%格式",变量)这种形式了,这样你所输入的变量就不知道会存储到哪里。

(2)空指针赋值的问题。
我们知道如果某一个指针是空的是不能直接给他赋值的原因是空指针不知道指得什么东西,那么他没有固定的内存,现在你给他赋值,通俗点理解就是他不知道该怎么存,也不知道存在哪,也不会储存,但是现在你有需要让他存储,那么就会出现上述的问题,这时候解决办法就是重新申请空间(用malloc或者new),或者是你尽量避免他成为空指针,或者是当他有成为空指针的可能性时,你就单独讨论。

下面几个例子就是有可能的:
下面的语句会出这个问题
int * p = 0;
p[0] = 100;
当然,实际代码中不可能这么明显,这只是一个例子,可能相似,这得你自己好好看看,上面的0实际上和NULL是一样的,这就是空指针赋了值。

下面这种写法也会产生问题
a=(double*)malloc(sizeof(double)*6);
h=......  
a[0]=h;  //未判断a是否为空,就去使用很危险.
首先你不知道malloc是否会成功 如果失败的话 返回的恰好是NULL 一般情况下 你分配这么点内存 是不会失败的 但是正如你说的 几个循环过后 你可能没free 内存耗尽 或者产生碎片 malloc失败了 你又没判断 那么恰好问题就是给空指针赋值产生异常

下面的三种指针情况是网上的:大家可以根据自己的情况和他的对照着看看:
可能性 3 种 
1: 
char *p; 
p = new char[number]; 
delete [] p; 
.... 
// always using p.... 
p = xxx; // access violation 

2: 
char *p; //随机指向一个位置,可能会出问题.
memcpy(p, xxx, number); // access violation 

3: 
char *p; 
p = new char[number]; 
delete [] p; 
......... 
delete [] p; // access violation

0xC0000005: Access Violation错误调试- -

补充一句话:(1)编译时没有问题
          (2)运行时是一个循环计算,设置断点,前几个循环都没有问题,到其中某一个循环(循环结束条件还没有达到)会     出现上述问题。

这时候肯定就是你在哪一步中间将空指针赋了值。

(3)数组或者指针越界

只要是和内存相关的基本都是有可能的,当然数组或是指针越界,这个也是很常见的,这个就不举例子了,相信大家都能理解什么意识,也知道怎么解决,这个就需要大家比较小心和仔细了。
————————————————
版权声明:本文为CSDN博主「中华丛迅」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hhq420684/article/details/18181099

原文地址:https://www.cnblogs.com/Stephen-Qin/p/11704648.html

时间: 2024-10-13 14:27:42

0xC0000005: 写入位置 0x00000000 时发生访问冲突的解决办法(转)的相关文章

0xC0000005: 读取位置 0x00000000 时发生访问冲突

遇见这种问题一般都是空指针,即:指针里没有赋值~ 如果你对null 进行操作就会产生空指针异常 Object obj = new Object(); 你要知道 obj是一个Object指针变量,指向Object类的一个实例 我们说obj是一个对象 实质是它指向一个对象的首地址 如果这个指针变量obj 没有指向任何空间 你调用它的方法和属性就会出错 例如 Object obj = new Object(); obj.equals("123");这个是没错的 但换下面语句 Object o

(msvcr80d.dll) 处未处理的异常: 0xC0000005: 读取位置 0x00000000时发生访问冲突

一般都是指针访问越界或者不能访问的地址 (msvcr80d.dll) 处未处理的异常: 0xC0000005: 读取位置 0x00000000时发生访问冲突,布布扣,bubuko.com (msvcr80d.dll) 处未处理的异常: 0xC0000005: 读取位置 0x00000000时发生访问冲突

启动MFC程序的时候报错:0xC0000005: 读取位置 0x00000000 时发生访问冲突

此程序的结构是 MouseCap.h #pragma once #include <afxwin.h> class MouseCapApp : public CWinApp { public: virtual BOOL InitInstance(); }; class CMainWindow : public CFrameWnd { protected: ...public: CMainWindow(); protected: afx_msg void OnLButtonDown(UINT n

问题解决——使用CriticalSection后 0xXXXXXXXX处最可能的异常: 0xC0000005: 写入位置 0x00000014 时发生访问冲突

================声明===================== 本文原创,转载请保持文章的完整性(含本声明),并显要的著名作者和出处. 本文链接:http://blog.csdn.net/wlsgzl/article/details/42003487 ========================================= 电脑有一个SSD和一个HHD,SSD只有一个分区做系统盘,HHD分4个区:D.E.F.G.其中D盘放工程代码. 还原电脑的时候,诺顿抽风,把HHD的

0x0F19B7EC (ucrtbased.dll)处(位于 ex6.exe 中)引发的异常: 0xC0000005: 写入位置 0x00740000 时发生访问冲突。

下面的代码在编译,运行时没有问题,在输入内容是出现异常如下: 0x0F19B7EC (ucrtbased.dll)处(位于 ex6.exe 中)引发的异常: 0xC0000005: 写入位置 0x00740000 时发生访问冲突. #include "stdafx.h"#include <conio.h>#include <stdio.h> int main(){ int NUM, I; struct STUDENT { char NAME[30]; int A

0xC0000005: 写入位置 0x0000000002450040 时发生访问冲突

遇到这样的报错,没有其他提示,跳入汇编代码,瞬间傻了 可以查看调试中的代码图,查看调用的顺序,定位问题位置 如果代码图看见的全是地址,说明访问的地方已经销毁,具体在哪里,可以借助中断时候的线程窗口 黄箭头指向 当前运行到那个线程,对比你的线程ID,大概能确定在那个线程,然后在分析 LOG_INFO << "rtsp listen start!!! RtspPro() thread id is " << boost::this_thread::get_id();

程序运行时 0xC0000005: 读取位置 0x00000000 时发生访问冲突 ,可能是 com 组件引入各种问题

在使用com组件事,可能引入很多不是问题的问题,比如CString 定义出运行时出错等等,这些问题解决的办法就是初始化组件 然后释放组件, 在使用组件时,如果仅仅用在按钮事件或者别的mfc 对话框类里面 可以正常使用,但是用到界面线程,而界面线程函数里面调用了函数com 组件的函数,必须初始化.不然就是上面错误 ::CoInitialize(NULL); 组件初始化函数 ::CoUninitialize(); 组件释放函数

写入位置 0xcdcdcdcd 时发生访问冲突

写入位置 0xcdcdcdcd 时发生访问冲突 分类: C2012-04-22 21:32 4750人阅读 评论(0) 收藏 举报 c 转载自:http://blog.sina.com.cn/s/blog_672c5a470100nsh1.html 出现这种错误多半是指针未能正确初始化. 在 Debug 模式下, VC 会把未初始化的栈内存全部填成 0xcc,当字符串看就是 烫烫烫烫…… 会把未初始化的堆内存全部填成 0xcd,当字符串看就是 屯屯屯屯…… 可以让我们方便地看出那些内存没初始化

有未经处理的异常: 0xC0000005: 读取位置 0xFFFFFFFC 时发生访问冲突

今天遇到一个问题,特在此记录,防止以后再次犯同样的错误: struct UserInfo { CString UserName;          //用户昵称 CString IP;                //用户IP SOCKET socket;             //用户的套接字 bool operator==(const UserInfo &uInfo) const { if (socket == uInfo.socket) return true; return fals