求助memcpy
查看原帖
求助memcpy
105833
樱洛CHANGE楼主2021/5/28 16:38

块链的split操作,第一种没有用memcpy很明显是对的

void Split(int x,int pos){
	if(x==-1||pos==t[x].sz)
	return ;
	Pushdown(x);
	int y=New();
	if(t[x].Tov)
	{
		t[y].Tov=t[x].Tov;
		t[y].nxt=t[x].nxt;
		t[x].nxt=y;
		t[y].sz=t[x].sz-pos;
		t[y].Rev=0;
	}
	else
	{
		t[y].nxt=t[x].nxt;
		t[x].nxt=y;
		t[x].sz=pos;
		for(int i=pos;i<=t[x].sz;i++)
		t[y].val[++t[y].sz]=t[x].val[i];
	}
	Update(x),Update(y);
}

第二种用了memcpy就莫名其妙炸掉了,也不知道哪里错了,求助大佬解释

void Split(int x,int pos){
	if(x==-1||pos==t[x].sz)
	return ;
	Pushdown(x);
	int y=New();
	if(t[x].Tov)
	{
		t[y].Tov=t[x].Tov;
		t[y].nxt=t[x].nxt;
		t[x].nxt=y;
		t[y].sz=t[x].sz-pos;
		t[y].Rev=0;
	}
	else
	{
		t[y].nxt=t[x].nxt;
		t[x].nxt=y;
		t[x].sz=pos;
		t[y].sz=t[x].sz-pos;
		memcpy(t[y].val,t[x].val+pos,t[y].sz*sizeof());
	}
	Update(x),Update(y);
}

(((包括Insert在内的所有操作的memcpy都锅掉了。。。是不是开结构体数组的原因需要重载某些运算符啊。。。

2021/5/28 16:38
加载中...