空指针的问题

Roy T 2006-05-13 08:21:48

我在做数据结构时候遇到一个难题,请好心人看看

//这是头文件的开头 ds.h (那些宏定义都省略了)
//静态顺序表的数据结构:
typedef struct SqList {
ElemType *elem; //Storage place.
int length; //How many elements are there in the SqList.
int size; //How big are this SqList.
} SqList;

//初始化:
void initial(SqList &L) {
L.elem = (ElemType*)malloc(INIT_SIZE*sizeof(ElemType));
if(!L.elem)
exit(OVERFLOW);
L.length = 0;
L.size = INIT_SIZE;
}

//判空
bool isEmpty(SqList L) {
if(L.length == 0)
return true;
return false;
}

//判满:
bool isFull(SqList L) {
if (L.length >= L.size)
return true;
return false;
}

//添加节点
bool insertElem(SqList &L, int position, ElemType insr_e) {
if(position<0 || position>L.length)
return ERROR;
if(isFull(L)) {
ElemType *newbase;
newbase = ( (ElemType*)realloc(L.elem, (L.size+INCREMENT)*sizeof(ElemType)) );
if(!newbase)
exit(OVERFLOW);
L.elem = newbase;
L.size += INCREMENT;
}
for(int i = L.length; i >= position; i--)
assign(L.elem[i+1], L.elem[i]);
assign(L.elem[position], insr_e);
L.length++;
return OK;
}
//遍历
void traverse(SqList L, void(*func)(ElemType&)) {
for(int i = 0; i < L.length; i++)
func(L.elem[i]);
}
//这是头文件的结尾 ds.h~

//以下是测试这个数据街购的: a.cpp
typedef int ElemType;

void assign(ElemType &dest_e, ElemType surc_e) {
dest_e = surc_e;
}

bool isEqual(ElemType a, ElemType b) {
if(a == b)
return true;
return false;
}

void print(ElemType &e) {
cout << e << ' ';
}

#include "ds.h"

int main() {
SqList D;
int i;
initial(D);

cout << isEmpty(D) << isFull(D) << endl;
//不写这一行什么都正常,写上这行就非法操作退出,用TCC3.0编译是 Null pointer assignment错误,我实在是找不出来呀,您受累给看看。。我已经精简到最简拉。。。万分感谢!!

for(i = 0; i < 16; i++)
insertElem(D, getLength(D),i+1);
traverse(D, print);
cout << endl;

return 0;
}
...全文
164 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Roy T 2006-05-15
  • 打赏
  • 举报
回复

会了。。。
Roy T 2006-05-15
  • 打赏
  • 举报
回复

啊,什么叫节帖给分啊,怎么弄啊,我不会阿
pottichu 2006-05-14
  • 打赏
  • 举报
回复
楼主结贴给分啊。
tatbaby 2006-05-14
  • 打赏
  • 举报
回复
问题解决了就好
Roy T 2006-05-13
  • 打赏
  • 举报
回复

谢谢yhmhappy2006() 和pottichu(拉拉是头猪)的启发!我在isEmpty()和isFull()中加了一句
L.elem = NULL;
就好了!!

真舒服啊,我都在这浪费了一天了。。
别笑,这就是初学者的心声,喝喝!
pottichu 2006-05-13
  • 打赏
  • 举报
回复
用指针或者引用,
因为bool isFull(SqList L)
在调用的时候 实际上 是创建了一个临时 SqList 对象,
而这个临时对象的 ElemType *elem; 是空指针。
Roy T 2006-05-13
  • 打赏
  • 举报
回复


谢谢你哦,不过
不能改成饮用阿, insertElem()还要用isFull(),那样就ambiguous call了。。。
塘外人 2006-05-13
  • 打赏
  • 举报
回复
bool isEmpty(SqList L) // => bool isEmpty(SqList& L)
bool isFull(SqList L) // => bool isFull(SqList& L)

参数改成引用
Roy T 2006-05-13
  • 打赏
  • 举报
回复

我手头只有30多分,我想问这个分数怎么挣啊,有什么好处,谢谢!

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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