关于Segmentation fault

yingchungui 2006-09-03 01:03:36
实现数据结构中顺序表(SqList)的基本操作时,有一个操作是DestroyList, 只要我加入L->elem = NULL语句,在运行的时候就会出现Segmentation fault
我是在红帽子9的gcc下运行的,基本操作实现如下:
Status DestroyList(SqList *L)
{
if (L->elem == NULL) {
printf("SqList didn't exist\n");
return ERROR;
}
free(L->elem);
L->elem = NULL;
L->length = 0;
L->listsize = 0;
return OK;
}

SqList 的定义如下:
typedef struct {
ElemType *elem;
int length;
int listsize;
} SqList;

期盼高手指点
...全文
259 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
OOPhaisky 2006-09-08
  • 打赏
  • 举报
回复
yingchungui(幺妖):

虽然已经结贴了,但是我还是回答一下你的问题。

不太明白 “解引用空指针”
----------------------------------
举个例子:
int *p = 0;//此处p是一个空指针,因为它什么也没有指向(值为0)
cout << *p << endl; //此处就“解引用空指针”了,即p是空指针,但是仍然对它进行“*p”,就发生了“解引用空指针”,此时会发生segment fault
yingchungui 2006-09-08
  • 打赏
  • 举报
回复
揭贴吧。
yingchungui 2006-09-05
  • 打赏
  • 举报
回复
To OOPhaisky(渴望成功) :
不太明白 “解引用空指针”
能否解释一下。

我只要一调用这个函数,就会出现“Segmentation fault”
yingchungui 2006-09-05
  • 打赏
  • 举报
回复
终于找到原因了。
不过还是想知道“解引用空指针”是什么意思?
JFDream_15 2006-09-03
  • 打赏
  • 举报
回复
赞成瞌睡虫的讲法,看看你调用这个函数的地方吧,应该传入了不该传指针导致的.
OOPhaisky 2006-09-03
  • 打赏
  • 举报
回复
Segmentation fault:一般是“解引用空指针”时发生的,楼主检查一下,是否有这种行为出现。
yingchungui 2006-09-03
  • 打赏
  • 举报
回复
如果我把L->elem = NULL;注释掉,就不会出现那个Segmentation fault,但是那样的话似乎没有起到销毁的作用。我在想问题是不是出现在gcc对指针处理上的问题,这个东西我在vc++下没有碰到。
jixingzhong 2006-09-03
  • 打赏
  • 举报
回复
DestroyList 本身没有什么问题 ...

检查一下其他地方有没有 对这个 被DestroyList 的节点 L 进行操作的。
这个错误一般多是指针操作发生错误 ...
MeE 2006-09-03
  • 打赏
  • 举报
回复
Status DestroyList(SqList *L)
{
if (L->elem == NULL) {
printf("SqList didn't exist\n");
return ERROR;
}

可以肯定,这个时候 L 已经是NULL 了,你再 引用 L->elem 肯定就core掉了

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧