社区
C语言
帖子详情
关于内存出错提示的困惑
mux
2000-11-03 12:18:00
加精
我做的是用vc4.0开发的基于windows操作系统的C程序,程序总是忽然终止并弹出一对话框提示:
XXXXXXXX指令引用XXXXXXXXX内存,该内存不能为[read].
而十分不可思义的是当程序执行到调用函数的return语句时也经常出现此类情况.
哪一位高手明白怎么会事敬请多多指导,火急!火急!
...全文
238
10
打赏
收藏
关于内存出错提示的困惑
我做的是用vc4.0开发的基于windows操作系统的C程序,程序总是忽然终止并弹出一对话框提示: XXXXXXXX指令引用XXXXXXXXX内存,该内存不能为[read]. 而十分不可思义的是当程序执行到调用函数的return语句时也经常出现此类情况. 哪一位高手明白怎么会事敬请多多指导,火急!火急!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
singlerace
2000-11-13
打赏
举报
回复
很可能是返回地址被非法覆盖了。在函数中一步步跟踪,同时查看[ebp+4](返回地址的存放地址)处有没有被改掉。
老魏2006
2000-11-07
打赏
举报
回复
还有可能:堆栈出现问题
whoo
2000-11-05
打赏
举报
回复
如果仅仅是在return 是出错,可能是调用参数或调用模式引起的问题。布置你是不是调用dll的函数。
土豆
2000-11-05
打赏
举报
回复
除了他们说的以外,我想可能还有这种情况,这种情况我前两天刚碰到过,搞了我俩天。
可能在你的函数中访问内存越界了,然后函数返回的时候就会出现这种情况,并且是在return 语句以后,也就是在函数退出时出栈出错,我跟踪过,反汇编,当跟踪到pop ebp时看到ebp的值变为00000003,而这个地址在NT中是不能访问的,这是NT的隔离区的地址,我们知道ebp关系到程序中变量地址的访问。所以我觉得你也可能是这种情况。
后来我发现实我在循环中访问地址越界了。你可以检查一下,你是不是也有这种情况。
仅供参考。
ggggwwww
2000-11-03
打赏
举报
回复
你的Return是Return什么?
可单步跟一下,看看你的返回变量的指针的地址。
返回时,最好用的是全局数组返回。或是函数的入口参数给定的指针。
例如:
static char FileNameArray[80]={0};
char * GetFileName()
{
memcpy(FileNameArray,"time.log",7);
return FileNameArray;
}
or
void GetFileName(char * FileName)
{
memset(FileName,0x00,8);
memcpy(FileName,"time.log",7);
return;
}
如果你是这样写的话应该会出错:
char * GetFileName()
{
char FileNameArray[80]={0};
memcpy(FileNameArray,"time.log",7);
return FileNameArray;
}
你的函数代码是什么?
可否贴上来或Email to ggggwwww@21cn.com。
Mr_Ldh
2000-11-03
打赏
举报
回复
是不是使用了内存分配函数但没有#include <malloc.h>,或者内存模式不正确(small large or huge?)本人就犯过这样的错误。
mux
2000-11-03
打赏
举报
回复
感谢诸位指教, 小弟受益非浅
有一点需特别说明 , 本人做的C是程序, 而非C++,
程序中的确引用了一些指向文件名的字符串数组指针 , 但到执行到return处出错 ,好象与此无关
请问遇到此类问题时应从何处入手 , 是否有现成的书籍可做参考
敬请大家继续指教!
w3guy
2000-11-03
打赏
举报
回复
一般出现这样的问题原因为:
1. 使用未初始化的指针
2. 释放(delete,free)未初始化的指针
3. 使用已被释放的指针
4. 重复释放指针
关于return 时出现这样的情况可能是你的局部对象的析构函数中出现了以上错误.
Arthur_Ma
2000-11-03
打赏
举报
回复
在nt下内存分配很严格,有很多空间是系统保留的。
你的问题十有八九时指针指在了这些空间地址,管理好你的指针吧
老魏2006
2000-11-03
打赏
举报
回复
跟踪你的指针是否有效?
指针有没有初始化?
java堆内堆外
内存
困惑
本文探讨了Java与C语言在文件IO操作上的差异,重点在于Java的JVM
内存
管理和GC对IO性能的影响。Java在进行IO时,由于堆内
内存
可能因GC而移动,需要额外的堆内堆外拷贝,增加了数据拷贝次数,降低了性能。相比之下,C语言的IO操作更为直接,没有额外的数据拷贝,但需要手动管理
内存
。
一文读懂C++11
内存
模型,多线程编程不再
困惑
本文深入探讨C++11
内存
模型,介绍其预备知识与概念,分析C++11前
内存
模型的指令重排和可见性问题。阐述C++11
内存
模型核心技术,如原子操作、
内存
顺序和happens - before关系。还给出计数器和线程安全队列的应用实例,并对比了与Java、C#
内存
模型的异同。
lda主题模型
困惑
度_r语言lda主题模型代码 lda主题模型 案例分析
本文讨论了R语言在灰色预测模型、最优化模型以及数学建模中的应用,并提及了R语言在LDA主题模型中的使用,特别是在
困惑
度评估方面的探讨。此外,提到了Python中进行LDA主题模型的常用包,并指出Spark MLlib LDA模型的迭代次数选择通常基于
困惑
度指标。
CUDA
内存
操作函数避坑指南:为什么你的cudaMemcpy总是
出错
?
本文深入剖析cudaMemcpy函数使用中的典型错误:拷贝方向误设、异步操作缺失同步、
内存
分配失败未检查、指针类型转换不当、二维数组步长配置错误,以及统一
内存
的隐式迁移开销。强调
内存
对齐对GPU访存性能的影响,并推荐Compute Sanitizer、Nsight等调试工具及防御性编程实践,助力构建健壮高效的GPU
内存
操作逻辑。
学习C++的
困惑
本博客探讨了C++编程中关于
内存
管理和指针的深入问题,包括指针的移动机制、自增运算符的特性、常量的存储方式、引用的使用及其与指针的关系、动态
内存
分配的注意事项等核心概念。
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章