精华内容
下载资源
问答
  • 原因跟之前一样,对象在内存中已经被销毁,或者这个对象压根就没有被创建过。 慢慢的查找p_Screen在哪里被复制以及在哪里被销毁,最有效的方法就是看函数调用栈。 当我把断点设置在p_Screen赋值语句的那一行时,...

    无独有偶,我居然又碰上了同样的问题。

     

    原因跟之前一样,对象在内存中已经被销毁,或者这个对象压根就没有被创建过。

    慢慢的查找p_Screen在哪里被复制以及在哪里被销毁,最有效的方法就是看函数调用栈。

    当我把断点设置在p_Screen赋值语句的那一行时,发现还没运行到断点处就已经触发异常了,当然还有一种可能就是断点处的函数根本就没有被调用,而是跳过了这个函数而继续往后面执行了,不过我反复测试了一下,基本可以排除第二种可能。

    因此问题的症结就在指针在还没有被初始化或者赋值之前就被访问了(看到这个错误读者是否很无语?那就继续往下看吧    )

    解决方法:

    将指针的初始化提前到在访问之前就行。  

    总结:这个问题确实是很简单,但是我为什么会犯这种错误呢?

    我觉得。。。这不怪我,不怪我,真的不怪我!!!

    责任在于框架程序的响应方式(~。-) :

    因为我的项目用的是MFC的框架编程,所以框架内部的各个模块调用先后顺序真的并不是很明确,而且不是显示(与隐式相对)的通过一个成员函数调用另一个成员函数,各个函数之间没有明确的调用与被调用关系。

    他们之间是基于消息机制驱动的。

    系统(内核)发送消息(这些消息大部分是我的项目为了创建窗口或者申请资源的需要而自动要求内核发送的,只有一小部分是内核捕捉到的消息,比如鼠标点击、键盘按下等等),指定函数对其进行响应,因此函数之间的调用关系以及执行的先后顺序自然是捉摸不定的。

    像这种基于系统消息驱动的程序,在编程时一定要小心了,在消息函数的调用顺序不明确的时候,尽量不要把自己的赋值语句写进去,除非万不得已,为了实现功能的需要。

    否则就有可能出现你的变量还没有被初始化之前就已经被访问,那么就会出现程序运行时错误了。(慎用框架)

    当然框架也有很多优点,对于我们这种刚刚写项目的newbie,对设计模式也不太了解,框架可以帮我们构造好项目的一个基本模型,我们只需要了解整个框架的结构,向里面添加一些功能就好,这样整个项目也就条理清晰,可读性也强,也易于维护。

     

    转载于:https://www.cnblogs.com/xwmcc/p/10033706.html

    展开全文
  • 访问非法内存 越界等

    2018-08-05 07:41:04
    1:一般都是非法内存操作,例如数组越界,例如申请a[5],却访问到a[5]或者a[6],这也会有很多情况,可能是循环操作时循环变量控制有问题,可能是字符串拷贝时长度发生溢出; 2:指针指向了非法内存,例如申明一个指针,但是...

    1:一般都是非法内存操作,例如数组越界,例如申请a[5],却访问到a[5]或者a[6],这也会有很多情况,可能是循环操作时循环变量控制有问题,可能是字符串拷贝时长度发生溢出;
    2:指针指向了非法内存,例如申明一个指针,但是没有对指针进行初始化,直接就引用,或者引用里面的元素或者函数,或者没有分配内存就进行释放等,另外,申请内存还要检查是否申请成功,如果没有申请成功也会出现这种情况;
    3:单步调试或者加打印信息,细心一点总可以找到错误的,注意编译成调试版本;
    4:如果是linux,可以产生core文件,从core文件查看出错的地方。

    展开全文
  • 网上看了一圈,说什么调整batchsize啥的,设置多卡啥的,根本不起作用,建议使用torch1.2查一下你是不是to(device)漏了,比如我在transformer Encoder时候忘记把Position编码的参数to(device)了,再torch1.2中就会...

    网上看了一圈,说什么调整batchsize啥的,设置多卡啥的,根本不起作用,建议使用torch1.2查一下你是不是to(device)漏了,比如我在transformer Encoder时候忘记把Position编码的参数to(device)了,再torch1.2中就会直接报错,而在torch1.6的版本就会出现上述的错误,死活搞不定!所以可以有个torch1.2的版本搞定了model,再使用torch1.6重新运行,这样不但能使用tensorboard(torch1.2的board不能显示图形),奇怪的错误(torch1.6总会出现奇奇怪怪的错误)也不见了。

    展开全文
  • 非法内存访问 SIGSTKFLT Linux专用,数学协处理器的栈异常 SIGSTOP 中止进程。无法处理和忽略。 SIGSYS 非法系统调用 ...

    repost from:http://www.cjjjs.com/paper/xmkf/2017817141130842.html

     很多用户认为进程异常终止情况无从分析,但实际上进程异常终止情况都是有迹可寻的. 所有的进程异常终止行为,都是通过内核发信号给特定进程或进程组实现的. 可分成几个类型进行描述:

        - SIGKILL. SIGKILL最特殊,因为该信号不可被捕获,同时SIGKILL不会导致被终止的进程产生core文件, 但如果真正的是由内核中发出的SIGKILL,则内核一定会在dmesg中记录下信息. 另外在内核中使用SIGKILL的地方屈指可数,如oom_kill_process()中, 所以通过dmesg记录并且分析内核中使用SIGKILL的代码,并不难分析原因
        - SIGQUIT, SIGILL, SIGABRT, SIGBUS, SIGFPE, SIGSEGV. 这几个信号在保留情况下会终止进程并会产生core文件, 用户根据core中的stack trace信息,能直接定位出导致终止信号的代码位置. 另外, SIGQUIT,SIGABRT一般是由用户代码自己使用的,好的代码一般会记录日志. SIGILL, SIGBUS, SIGFPE, SIGSEGV, 都是由内核中产生的,搜索内核源码,不难列出内核中使用这几个信号的地方, 如SIGILL 是非法指令,可能是浮点运算产生的代码被corrupted或文本区域的物理内存corruption; SIGBUS多由MCE故障定位导致; SIGSEGV多由应用代码的指针变量被corrupted导致. 对于应用的heap或stack的内存被corrupted, 可用valgrind工具对应用进行profile, 通常能直接发现导致corruption的代码
        - SIGINT, SIGPIPE, SIGALRM, SIGTERM. 这几个信号在保留情况下终止进程但不会产生core文件. 对这几个信号,建议用户一定要定义一个handler,以记录产生问题的上下文. 比较容易忽略的是SIGPIPE, 很多用户程序在使用select()或poll()时只监听read/write描述符,不监听exception描述符,在对方TCP已经关闭的情况下,仍然向socket中写入,导致SIGPIPE.

        - 对于恶意的代吗产生的进程终止行为,如合作的一些进程中,A向B发SIGKILL, 而没做日志记录,或者B直接判断某条件而调用exit(), 也没有做日志记录.在应用代码量很大的情况下,通过分析代码故障定位这种情形也许很难. SystemTap提供了解决这个问题的一个比较好的方法,就是写用户层的probes, 追踪进程对signal(), exit() 等系统调用的使用.

    Signal
    Description
    SIGABRT
    由调用abort函数产生,进程非正常退出
    SIGALRM
    用alarm函数设置的timer超时或setitimer函数设置的interval timer超时
    SIGBUS
    某种特定的硬件异常,通常由内存访问引起
    SIGCANCEL
    由Solaris Thread Library内部使用,通常不会使用
    SIGCHLD
    进程Terminate或Stop的时候,SIGCHLD会发送给它的父进程。缺省情况下该Signal会被忽略
    SIGCONT
    当被stop的进程恢复运行的时候,自动发送
    SIGEMT
    和实现相关的硬件异常
    SIGFPE
    数学相关的异常,如被0除,浮点溢出,等等
    SIGFREEZE
    Solaris专用,Hiberate或者Suspended时候发送
    SIGHUP
    发送给具有Terminal的Controlling Process,当terminal被disconnect时候发送
    SIGILL
    非法指令异常
    SIGINFO
    BSD signal。由Status Key产生,通常是CTRL+T。发送给所有Foreground Group的进程
    SIGINT
    由Interrupt Key产生,通常是CTRL+C或者DELETE。发送给所有ForeGround Group的进程
    SIGIO
    异步IO事件
    SIGIOT
    实现相关的硬件异常,一般对应SIGABRT
    SIGKILL
    无法处理和忽略。中止某个进程
    SIGLWP
    由Solaris Thread Libray内部使用
    SIGPIPE
    在reader中止之后写Pipe的时候发送
    SIGPOLL
    当某个事件发送给Pollable Device的时候发送
    SIGPROF
    Setitimer指定的Profiling Interval Timer所产生
    SIGPWR
    和系统相关。和UPS相关。
    SIGQUIT
    输入Quit Key的时候(CTRL+\)发送给所有Foreground Group的进程
    SIGSEGV
    非法内存访问
    SIGSTKFLT
    Linux专用,数学协处理器的栈异常
    SIGSTOP
    中止进程。无法处理和忽略。
    SIGSYS
    非法系统调用
    SIGTERM
    请求中止进程,kill命令缺省发送
    SIGTHAW
    Solaris专用,从Suspend恢复时候发送
    SIGTRAP
    实现相关的硬件异常。一般是调试异常
    SIGTSTP
    Suspend Key,一般是Ctrl+Z。发送给所有Foreground Group的进程
    SIGTTIN
    当Background Group的进程尝试读取Terminal的时候发送
    SIGTTOU
    当Background Group的进程尝试写Terminal的时候发送
    SIGURG
    当out-of-band data接收的时候可能发送
    SIGUSR1
    用户自定义signal 1
    SIGUSR2
    用户自定义signal 2
    SIGVTALRM
    setitimer函数设置的Virtual Interval Timer超时的时候
    SIGWAITING
    Solaris Thread Library内部实现专用
    SIGWINCH
    当Terminal的窗口大小改变的时候,发送给Foreground Group的所有进程
    SIGXCPU
    当CPU时间限制超时的时候
    SIGXFSZ
    进程超过文件大小限制
    SIGXRES
    Solaris专用,进程超过资源限制的时候发送

    signal对应的值:

    POSIX.1中列出的信号:

    SIGHUP 1 A 终端挂起或者控制进程终止 
    SIGINT 2 A 键盘中断(如break键被按下) 
    SIGQUIT 3 C 键盘的退出键被按下 
    SIGILL 4 C 非法指令 
    SIGABRT 6 C 由abort(3)发出的退出指令 
    SIGFPE 8 C 浮点异常 
    SIGKILL 9 AEF Kill信号 
    SIGSEGV 11 C 无效的内存引用 
    SIGPIPE 13 A 管道破裂: 写一个没有读端口的管道 
    SIGALRM 14 A 由alarm(2)发出的信号 
    SIGTERM 15 A 终止信号 
    SIGUSR1 30,10,16 A 用户自定义信号1 
    SIGUSR2 31,12,17 A 用户自定义信号2 
    SIGCHLD 20,17,18 B 子进程结束信号 
    SIGCONT 19,18,25 进程继续(曾被停止的进程) 
    SIGSTOP 17,19,23 DEF 终止进程 
    SIGTSTP 18,20,24 D 控制终端(tty)上按下停止键 
    SIGTTIN 21,21,26 D 后台进程企图从控制终端读 
    SIGTTOU 22,22,27 D 后台进程企图从控制终端写 

    没在POSIX.1中列出,而在SUSv2列出

    SIGBUS 10,7,10 C 总线错误(错误的内存访问) 
    SIGPOLL A Sys V定义的Pollable事件,与SIGIO同义 
    SIGPROF 27,27,29 A Profiling定时器到 
    SIGSYS 12,-,12 C 无效的系统调用 (SVID) 
    SIGTRAP 5 C 跟踪/断点捕获 
    SIGURG 16,23,21 B Socket出现紧急条件(4.2 BSD) 
    SIGVTALRM 26,26,28 A 实际时间报警时钟信号(4.2 BSD) 
    SIGXCPU 24,24,30 C 超出设定的CPU时间限制(4.2 BSD) 
    SIGXFSZ 25,25,31 C 超出设定的文件大小限制(4.2 BSD) 

    (对于SIGSYS,SIGXCPU,SIGXFSZ,以及某些机器体系结构下的SIGBUS,Linux缺省的动作是A (terminate),SUSv2 是C (terminate and dump core))。 

    下面是其它的一些信号 

    信号 值 处理动作 发出信号的原因 
    ---------------------------------------------------------------------- 
    SIGIOT 6 C IO捕获指令,与SIGABRT同义 
    SIGEMT 7,-,7 
    SIGSTKFLT -,16,- A 协处理器堆栈错误 
    SIGIO 23,29,22 A 某I/O操作现在可以进行了(4.2 BSD) 
    SIGCLD -,-,18 A 与SIGCHLD同义 
    SIGPWR 29,30,19 A 电源故障(System V) 
    SIGINFO 29,-,- A 与SIGPWR同义 
    SIGLOST -,-,- A 文件锁丢失 
    SIGWINCH 28,28,20 B 窗口大小改变(4.3 BSD, Sun) 
    SIGUNUSED -,31,- A 未使用的信号(will be SIGSYS) 

    (在这里,- 表示信号没有实现;有三个值给出的含义为,第一个值通常在Alpha和Sparc上有效,中间的值对应i386和ppc以及sh,最后一个值对应mips。信号29在Alpha上为SIGINFO / SIGPWR ,在Sparc上为SIGLOST。) 

    处理动作一项中的字母含义如下 
    A 缺省的动作是终止进程 
    B 缺省的动作是忽略此信号 
    C 缺省的动作是终止进程并进行内核映像转储(dump core) 
    D 缺省的动作是停止进程 
    E 信号不能被捕获 
    F 信号不能被忽略 



    展开全文
  •  问题描述: 应用程序崩溃,或安装 Visual Studio 2013年或.NET Framework 4.5.1 后,使用 System....EF使用System.Data.SqlClient也会报内存访问非法异常。 异常堆栈4种,仅列一种: .SNIAddProvider(SNI_C
  • 文中只是谈些Dll的调用问题,只是自己的经验。 开始自己编写的Dll是有VC6...问题就是主程序里传指针给Dll里的Vector指针,传的进去,但是在Dll指针的地址为空,异常在网上说是0X000005地址内容非法访问,最后也是没
  • Access Violation(非法访问),General Protection Fault(一般保护性错误)或者Invalid Page Fault(无效页面错误),虽然说法不一样,但本质上总是由同一种错误引起的。Access Violation常常在计算机用户运行的...
  • CUDA中内存访问越界问题

    千次阅读 2018-03-18 13:37:27
    经实验发现,有的非法访问很致命,函数不会运行,这种错误,可以CHECK到,但有些非法内存访问不致命,可能是访问到其他设备内存上了,这时CHECK不会报错,但是会出现逻辑上的错误,因为访问的值是错误的。...
  • 一种内存非法访问【C++警示录一】

    千次阅读 2009-12-24 17:25:00
    的时候内存非法访问 这是什么原因?仍未解决,跪求原因     //用到的函数 void DealStrWitht(char *str) {  char *s=str;  char *addstr="/t";  while(*s != ' ' && *s != '/0')  {  s++;  }...
  • 使用valgrind来发现内存泄漏和非法内存操作

    万次阅读 多人点赞 2013-02-04 13:30:40
    翻译难免会因个人水平原因而有不准确的地方,请大家多批评指正,上面是...valgrind是Linux平台一个多用途的代码审查和内存调试工具。它可以在valgrind自己的环境中运行你的程序,监控malloc/free,(new/delete for C+
  • 错误:NetworkInformationException: 内存位置访问无效。 当unity使用GetAllNetworkInterfaces ()获取本机mac和ip时,有时候会报内存错误。而控制台程序从来不报。每次出现这个错误都需要把unity关掉重新开。 ...
  • 一、AddressSanitizer简介 本人这次使用AddressSanitizer是因工作上负责的程序发生了内存越界访问非法修改了第三方内存管理库的内存数据,使程序偶尔发生coredump。使用valgrind时,一直报以下错误,网上也没有...
  • CUDA内存访问

    千次阅读 2013-12-10 15:52:32
    http://blog.sina.com.cn/s/blog_5e8e35510100lizu.html
  • 在写C/C++程序时,要小心内存泄漏,内存越界访问,但最粗心的也就是这一块;在程序运行过程中,最担心的也就是突然core掉,或程序占用完内存。此时要么DBG产生的core文件,要么是查看日志再对照源代码,假如此时你的...
  • 为了解决循环引用导致的内存泄漏,引入了weak_ptr弱指针,weak_ptr的构造函数不会修改引用计数的值,从而不会对对象的内存进行管理,其类似一个普通指针,但不指向引用计数的共享内存,但是其可以检测到所管理的对象...
  • 1. 内存单元的访问方式(这里的不全,之后会进一步补充):  1) 总共有四种方式:  i. [立即数],但是在这种情况下只能作为源操作数(即第二个操作数,比如mov ax, [15]等),此时访问内存是(ds:立即数),但是不...
  • JVM可以使用的内存分外2种:堆内存和堆外内存,堆内存完全由JVM负责...C语言的内存分配和释放函数malloc/free,必须要一一对应,否则就会出现内存泄露或者是野指针的非法访问。java中我们需要手动释放获取的堆外内存
  • 内存不能为read或written的解决方案

    千次阅读 2013-12-08 23:16:12
    ”指令引用的“0x00000000”内存,该内存不能为“read”或“written”」,然后应用程序被关闭。      如果去请教一些「高手」,得到的回答往往是「Windows就是这样不稳定」之类的义愤和不屑。其实,这个错误并...
  • malloc()造成的内存非法读取错误

    千次阅读 2005-07-06 13:40:00
    那么,当size为0时,分配是成功的,但这个指针指向的空间却是空的,指针有效,访问时却非法。  这个问题在DEBUG时看不到(至少我跟进去几次都没报错),而且在XP系统中也不报错(可能偶尔也有报错),但在2000系统...
  • 1、问题1:Web应用程序[]似乎已经启动了一个… 1.1、报错异常信息显示: 6-Apr-2021 19:37:28.042 警告 [RMI TCP Connection(6)-127.0.0.1] org.apache.catalina.loader....这很可能会造成内存泄漏
  • <br />    1、微软IE缓冲溢出漏洞引起 -- 解决 打漏洞补丁   2、内存或虚拟内存地址使用冲突造成  程序的运行需要分配一定的内存地址给程序使用,当程序结束时释放留出空间让给...
  • 0X000000该内存不能为read written的解决方法 出现这个现象有方面的,一是硬件,即内存方面有问题,二是软件,这就有多方面的问题了。 一:先说说硬件: 一般来说,电脑硬件是很不容易坏的。内存出现问题的可能性...
  • 内存报错代码及其解决办法

    千次阅读 2011-07-29 18:46:08
    问题: Microsoft Exchange 目录服务器名称,%1,是非法的。 错误代码: 0xC00000B8 错误转换: BERR_SERVER_NOT_WRITABLE 问题: The Microsoft Exchange Directory 服务器,%1,不是当前可写。 请尝试稍后操作。 ...
  • 内存不能为只读问题的解决办法

    千次阅读 2013-01-18 14:34:13
    内存不能为Read只读问题的解决办法 出现这个现象有方面的,一是硬件,即内存方面有问题,二是软件,这就有多方面的问题了。  一:先说说硬件:  一般来说,电脑硬件是很不容易坏的。内存出现问题的可能性...
  • c++内存错误的提示以及解决办法

    千次阅读 2020-02-19 15:49:50
    1. *** Error in `python': free(): corrupted unsorted chunks: 0x000000000377d840 *** ...以上错误的提示,都是由于内存非法访问导致的。 需要仔细检查数据,矩阵,以及指针的访问情况。
  • 【Linux】Linux的虚拟内存详解(MMU、页表结构)

    万次阅读 多人点赞 2018-07-16 20:16:28
    解决这个问题,人们设计了许多的方案,其中最成功的当属虚拟内存技术。Linux作为一个以通用为目的的现代大型操作系统,当然也毫不例外的采用了优点甚多的虚拟内存技术。   虚拟内存 为了运行比实际物理内存...
  • 内存泄漏和内存溢出的联系与区别

    万次阅读 多人点赞 2018-04-28 11:43:37
    一:内存泄漏(memory leak)1:内存泄漏是指...3:内存泄漏具有隐蔽性,积累性的特征,比其他内存非法访问错误更难检测。这是因为内存泄漏产生的原因是内存块未被释放,属于遗漏型缺陷而不是过错型缺陷。此外,内存...
  • 1. 访问内存的要素:  a. 总共只有两大要素:一是内存单元的地址,而是内存单元的类型;  b. 内存单元的首地址由DS:[X]确定,而内存单元的类型(字节型还是字型)由寄存器的类型给出,比如访问内存的寄存器的类型...
  • 解决" 0X000000该内存不能为read" 的方法现在有很多人在使用donghai制作的电脑公司ghost版的系统,经常会出现“0X000000该内存不能为read”的对话框,作者在最新发布的5。1版本中提到已经完美解决了这个问题,但事实...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 53,707
精华内容 21,482
关键字:

非法内存访问怎么解决