C++的Segmentation fault (core dumped)问题

各位大哥哥大姐姐们球球了,我写作业写了个测相等的函数,结果就一直蹦这个错!!实在是不知道怎么改了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