社区
工具平台和程序库
帖子详情
如何处理非法内存引用?
cugege
2003-09-05 07:45:50
操作系统:UNIX
编程语言:C
请教问题:
我的程序给出 SIGSEGV (11) 错误,请问我该如何处理这种非法内存引用的错误?
谢谢!
...全文
441
12
打赏
收藏
如何处理非法内存引用?
操作系统:UNIX 编程语言:C 请教问题: 我的程序给出 SIGSEGV (11) 错误,请问我该如何处理这种非法内存引用的错误? 谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
step_by_step
2003-09-11
打赏
举报
回复
多加强在使用内存时的检查,free之后要记住把指针赋值为0
botao
2003-09-10
打赏
举报
回复
MSDN上的一段话:
Attempting to free an invalid pointer (a pointer to a memory block that was not allocated by malloc, or realloc) may affect subsequent allocation requests and cause errors.
参考一下.
ejiue
2003-09-10
打赏
举报
回复
呵呵。这样的问题我已经遇到很多次了。在用vc的时候。
可惜来晚了。
cugege
2003-09-10
打赏
举报
回复
谢谢各位的支持,我已经找到了根源:
在程序出错时,根本就没有调用初始化部分,所以再去释放内存当然就找不到.
xiaoyunet
2003-09-08
打赏
举报
回复
if (select_dp->I != NULL)
{
if (select_dp->I[i] != (short *) 0)
{
free(select_dp->I[i]); // HERE core dump
select_dp->I[i]=0; //加上这句看看。
}
}
说实话,这段代码是在不怎么样,问题也八成不在这里。引发core dump的原因是重复的释放了内存。如果所有需要释放这块内存的地方都是使用这样的代码,那么加上我所说的这句就是有用的,否则,你还要继续辛苦了。
cugege
2003-09-08
打赏
举报
回复
Hi,
我已经用gdb找到了非法访问的语句,但我不知道如何去改,请问如何修改?
非常感谢!
********************************************************
if (select_dp->I != NULL)
{
if (select_dp->I[i] != (short *) 0)
free(select_dp->I[i]); // HERE core dump
}
其中,select_dp 类型是 "SQLDA *" 类型的
********************************************************
youngS
2003-09-08
打赏
举报
回复
写一个信号处理函数,这样就不会因为段错误让整个程序退出了。
ezhou
2003-09-08
打赏
举报
回复
如果不用动态分配,就不用释放。
cugege
2003-09-08
打赏
举报
回复
1. 我加上 “select_dp->I[i]=0; ”仍然出现core dump.
2. 请教: 如果不用动态分配,请问如何分配内存和释放内存?
多谢!
rtdb
2003-09-08
打赏
举报
回复
不太正常的说, 一个CHAR,一个SHORT, 没必要动态分配的,
这不是自找麻烦么。
cugege
2003-09-08
打赏
举报
回复
另外,对select_dp初始化时,程序如下:
**********************************************************
for (i = 0; i < MAX_ITEMS; i++) {
select_dp->I[i] = (short *) malloc(sizeof(short));
select_dp->V[i] = (char *) malloc(1);
}
***********************************************************
techlibin
2003-09-07
打赏
举报
回复
找到非法访问的语句,修改即可
免费下载:C语言难点分析整理.doc
1. C 语言中的指针和
内存
泄漏 5 2. C语言难点分析整理 10 3. C语言难点 18 4. C/C++实现冒泡排序算法 32 5. C++中指针和
引用
的区别 35 6. const char*, char const*, char*const的区别 36 7. C中可变参数函数实现 38 8. C程序
内存
中组成部分 41 9. C编程拾粹 42 10. C语言中实现数组的动态增长 44 11. C语言中的位运算 46 12. 浮点数的存储格式: 50 13. 位域 58 14. C语言函数二维数组传递方法 64 15. C语言复杂表达式的执行步骤 66 16. C语言字符串函数大全 68 17. C语言宏定义技巧 89 18. C语言实现动态数组 100 19. C语言笔试-运算符和表达式 104 20. C语言编程准则之稳定篇 107 21. C语言编程常见问题分析 108 22. C语言编程易犯毛病集合 112 23. C语言缺陷与陷阱(笔记) 119 24. C语言防止缓冲区溢出方法 126 25. C语言高效编程秘籍 128 26. C运算符优先级口诀 133 27. do/while(0)的妙用 134 28. exit()和return()的区别 140 29. exit子程序终止函数与return的差别 141 30. extern与static存储空间矛盾 145 31. PC-Lint与C\C++代码质量 147 32. spirntf函数使用大全 158 33. 二叉树的数据结构 167 34. 位运算应用口诀和实例 170 35.
内存
对齐与ANSI C中struct
内存
布局 173 36. 冒泡和选择排序实现 180 37. 函数指针数组与返回数组指针的函数 186 38. 右左法则- 复杂指针解析 189 39. 回车和换行的区别 192 40. 堆和堆栈的区别 194 41. 堆和堆栈的区别 198 42. 如何写出专业的C头文件 202 43. 打造最快的Hash表 207 44. 指针与数组学习笔记 222 45. 数组不是指针 224 46. 标准C中字符串分割的方法 228 47. 汉诺塔源码 231 48. 洗牌算法 234 49. 深入理解C语言指针的奥秘 236 50. 游戏外挂的编写原理 254 51. 程序实例分析-为什么会陷入死循环 258 52. 空指针究竟指向了
内存
的哪个地方 260 53. 算术表达式的计算 265 54. 结构体对齐的具体含义 269 55. 连连看AI算法 274 56. 连连看寻路算法的思路 283 57. 重新认识:指向函数的指针 288 58. 链表的源码 291 59. 高质量的子程序 295 60. 高级C语言程序员测试必过的十六道最佳题目+答案详解 297 61. C语言常见错误 320 62. 超强的指针学习笔记 325 63. 程序员之路──关于代码风格 343 64. 指针、结构体、联合体的安全规范 346 65. C指针讲解 352 66. 关于指向指针的指针 368 67. C/C++ 误区一:void main() 373 68. C/C++ 误区二:fflush(stdin) 376 69. C/C++ 误区三:强制转换 malloc() 的返回值 380 70. C/C++ 误区四:char c = getchar(); 381 71. C/C++ 误区五:检查 new 的返回值 383 72. C 是 C++ 的子集吗? 384 73. C和C++的区别是什么? 387 74. 无条件循环 388 75. 产生随机数的方法 389 76. 顺序表及其操作 390 77. 单链表的实现及其操作 391 78. 双向链表 395 79. 程序员数据结构笔记 399 80. Hashtable和HashMap的区别 408 81. hash 表学习笔记 410 82. C程序设计常用算法源代码 412 83. C语言有头结点链表的经典实现 419 84. C语言惠通面试题 428 85. C语言常用宏定义 450
什么是
内存
泄漏?什么是野指针?什么是
内存
越界?如何避免?
内存
泄漏 百度百科上的定义:
内存
泄漏(Memory Leak)是指程序中己动态分配的堆
内存
由于某种原因程序未释放或无法释放,造成系统
内存
的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。 一看定义,坑好像更多了,动态分配,堆
内存
是什么? 某种原因包含哪种原因? 未释放我能理解,无法释放是什么时候 看后果很严重,运行速度减慢!系统崩溃!那么
内存
究竟为什么这么强?? 危害举了一个例子,比如服务...
什么是
内存
泄漏?如何避免?
为了避免
内存
泄漏,开发人员需要仔细管理
内存
和资源的分配与释放,遵循良好的编程实践,并使用适当的工具和技术来检测和修复潜在的
内存
泄漏问题。)指的是在程序中,已动态分配的堆
内存
由于某种原因未被程序释放或无法释放,造成系统
内存
的浪费。在这种情况下,即使这些对象都不再被程序的其他部分
引用
,它们之间的相互
引用
也会导致垃圾回收机制无法识别出这些对象不再需要,进而造成
内存
泄漏。:在编写代码时,应遵循良好的编程实践,如避免在循环中频繁创建和销毁对象,尽量重用对象以减少
内存
分配和释放的频率。
C语言中指针操作的安全性与陷阱:深入理解
非法
指针
引用
在C语言编程中,指针是一种强大的工具,它能够直接操作
内存
地址,提供灵活的数据
处理
能力。本文将通过一个具体的代码示例来探讨指针操作中常见的陷阱之一:
非法
指针
引用
,以及它可能导致的问题。在
处理
指针时保持谨慎和细致的态度,是成为一名优秀的C语言程序员不可或缺的一部分。这段代码乍看之下似乎没有明显的语法错误,但它实际上包含了严重的逻辑缺陷和潜在的运行时错误。:一旦指针不再指向有效的
内存
位置(例如,当它所指向的对象被销毁或重新分配),应将其设置为。指针或未初始化的指针,递增或递减操作是未定义的,应避免执行此类操作。
“0X????????”指令
引用
的“0x00000000”
内存
,该
内存
不能为“read”或“written”
在网上查到的资料,留着备用 使用Windows操作系统的人有时会遇到这样的错误信息: 「“0X????????”指令
引用
的“0x00000000”
内存
,该
内存
不能为“read”或“written”」,然后应用程序被关闭。 如果去请教一些「高手」,得到的回答往往是「Windows就是这样不稳定」之类的义愤和不屑。其实,这个错误并不一定是Windows不稳定造成的。本文就来简单分
工具平台和程序库
24,855
社区成员
27,329
社区内容
发帖
与我相关
我的任务
工具平台和程序库
C/C++ 工具平台和程序库
复制链接
扫一扫
分享
社区描述
C/C++ 工具平台和程序库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章