vs2013调试时d出一个“无效指针”错误

vs2013调试时d出一个“无效指针”错误,第1张

auto scene=.....这步定义的是个指针是在函数内部,是个局部变量,当这个函数结束,其所指的位于栈上的内存空间要被释放,scene就变成无效指针了。不知指向谁。堆和栈的区别

一个由C/C++编译的程序占用的内存分乎稿羡为以下几个部分

1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等岁拍。其

*** 作方式类似于数据结构中的栈。

2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回

收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。

3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化

全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另

一块区域。 - 程序结束后敬乱由系统释放。

4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放

5、程序代码区—存放函数体的二进制代码。

二、例子程序

这是一个前辈写的,非常详细

//main.cpp

int a = 0全局初始化区

char *p1全局未初始化区

main()

{

int b栈

char s[] = "abc"栈

char *p2栈

char *p3 = "123456"123456\0在常量区,p3在栈上。

static int c =0; 全局(静态)初始化区

p1 = (char *)malloc(10)

p2 = (char *)malloc(20)

分配得来得10和20字节的区域就在堆区。

strcpy(p1, "123456")123456\0放在常量区,编译器可能会将它与p3所指向的"123456"

优化成一个地方。

}

近挺多网银物友出现这样的问题,建议了解一下是如何产生内存不能读,以后碰到类似的才不会困惑。一般如果是玩游戏出现有可能该游戏软件冲突,建议卸载重新安装。

如果你是打开IE出现的有可能是ie应用程序访问内存出错或者某些文件丢失造成的

1 、右击桌面上“我的电脑”→属性→高级→错误报告→错误汇报→勾选“禁用错误汇报”→“但在发生严重错误时通知我”复选框→确定。这样处理对于一些小错误,Windows XP就不会d出错误提示了。

2、如果不行彻底关闭错误报告服务。开始→运行中输入→services.msc→打开搜散“服务”窗口→找到“Error Reporting Service”→打开“Error Reporting Service的属性”对话框→将“启动类型”改为“已禁用”→确定后重新启动系统。(此项目关闭的注册表方式:开始→运行→输入regedit→确定→找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug]中的Auto=0改成Auto=1)

、重要提示:不要只看这个错误提示的指令代码,而是要看:出这个提示框世搏氏的上面蓝色条状部分提示的是XXX.EXE那个位置是什么程序,就大体定位引起出错或者冲突的主要原因了,对症下药就能解决。简单有效的处理方法是看错误提示,哪一个软件引起的冲突就卸载那个软件,重新启动机器以后首先关闭杀毒软件,重新运行安装。

崩溃的时候在d出的对话框按相应按钮进入调试,肆棚按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调裂游则用的源代码或汇编指令处,看不懂时双击下一行,直到能磨腊看懂为止。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12547884.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存