社区
工具平台和程序库
帖子详情
如何处理非法内存引用?
cugege
2003-09-05 07:45:50
操作系统:UNIX
编程语言:C
请教问题:
我的程序给出 SIGSEGV (11) 错误,请问我该如何处理这种非法内存引用的错误?
谢谢!
...全文
444
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
- **
非法
指针访问**:尝试访问已释放或未分配的
内存
地址。 - **野指针**:指针指向不确定或无效的位置。 - **未初始化的指针**:在未赋值之前就使用指针。 - **双重释放**:释放同一块
内存
两次。 #### 使用动态
内存
...
什么是
内存
泄漏?什么是野指针?什么是
内存
越界?如何避免?
内存
泄漏 百度百科上的定义:
内存
泄漏(Memory Leak)是指程序中己动态分配的堆
内存
由于某种原因程序未释放或无法释放,造成系统
内存
的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。 一看定义,坑好像更多...
什么是
内存
泄漏?如何避免?
在这种情况下,即使这些对象都不再被程序的其他部分
引用
,它们之间的相互
引用
也会导致垃圾回收机制无法识别出这些对象不再需要,进而造成
内存
泄漏。:在编写代码时,应遵循良好的编程实践,如避免在循环中频繁创建和...
C语言中指针操作的安全性与陷阱:深入理解
非法
指针
引用
本文将通过一个具体的代码示例来探讨指针操作中常见的陷阱之一:
非法
指针
引用
,以及它可能导致的问题。在
处理
指针时保持谨慎和细致的态度,是成为一名优秀的C语言程序员不可或缺的一部分。这段代码乍看之下似乎没有...
“0X????????”指令
引用
的“0x00000000”
内存
,该
内存
不能为“read”或“written”
”指令
引用
的“0x00000000”
内存
,该
内存
不能为“read”或“written”」,然后应用程序被关闭。 如果去请教一些「高手」,得到的回答往往是「Windows就是这样不稳定」之类的义愤和不屑。其实,这个错误并不一定...
工具平台和程序库
24,854
社区成员
27,330
社区内容
发帖
与我相关
我的任务
工具平台和程序库
C/C++ 工具平台和程序库
复制链接
扫一扫
分享
社区描述
C/C++ 工具平台和程序库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章