各位大哥哥大姐姐们球球了,我写作业写了个测相等的函数,结果就一直蹦这个错!!实在是不知道怎么改了QAQ,能帮我看看吗!
是个struct的作业,长这样:
struct int_list {
int* data;
int size;
int capacity;
};
make_new()长这样:
int_list make_new(int cap = 5)
{
int_list newlist;
if(cap <= 0)
cmpt::error("Capacity should be more than 0. ");
newlist.size = 0;
newlist.capacity = cap;
newlist.data = new int[cap];
return newlist;
}
我侧相等的长这样:
bool operator==(int_list a, int_list b)
{
bool ans = true;
if(a.size != b.size)
ans = false;
else{
for(int i = 0; i < a.size; i++){
if(a.data[i] != b.data[i])
ans = false;
}
}
return ans;
}
test长这样:
void equal_test(){
int_list c = make_new();
int_list d = make_new();
assert(c == d);
}
就是这样!他一直说Segmentation fault (core dumped),是怎么回事呀qaq
有些问题
int_list make_new(int cap = 5)
这个函数返回值不行,函数内部定义的只是一个临时变量,返回后外部无法使用,因为函数内临时变量离开函数后就被系统回收了。你可以改成指针返回,函数内部new,或者作为函数参数,传递一个引用,比如
make_new(int cap,int_list &list),在函数里直接用list就可以了
newlist.size = 0;
newlist.capacity = cap;
newlist.data = new int[cap];
size表示data数组的大小,怎么设置成0呢?后面用它判断啊
段错误一般是内存越界了,但是看着代码里面也没有越界的地方。
==重载那修改一下试试:
bool operator==(int_list a, int_list b)
{
bool ans = true;
//说明没有初始化
if(a.size < 0 || b.size < 0)
return false;
if(a.size != b.size)
ans = false;
else
{
for(int i = 0; i < a.size; i++)
{
if(a.data[i] != b.data[i])
{
ans = false;
break;
}
}
}
return ans;
}
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps: 问答会员年卡【8折】购 ,限时加赠IT实体书,即可 享受50次 有问必答服务,了解详情>>>https://t.csdnimg.cn/RW5m