【发布时间】:2015-05-31 04:04:10
【问题描述】:
我是 C 新手,我正在尝试针对某个问题模拟撤消功能。我正在使用这样定义的通用向量:
typedef void* Element;
typedef struct {
Element* elems;
int size;
int capacity;
} Vector;
为此,我创建了一个名为“Copy”的函数,它应该返回我正在传递的向量的副本:
Vector* copyVector(Vector *v) {
Vector* rez;
rez = createVector();
int i;
for (i = 0; i < getSize(v); i++) {
Element el = getElem(v, i);
add(rez, el);
}
return rez;
}
当我每次调用它来保存“之前”向量时,它都会起作用...就像当我尝试在当前向量上应用添加或删除时,我首先在另一个名为 undoVec 的向量上调用此复制函数,如下所示:
undoVec = copyVector(v);
我检查过,它可以工作,但是当我调用我的撤消函数时......它应该与之前的代码相反:
v = copyVector(undoVec);
它不再工作了。什么都不做。它不会修改我的向量 v... 我认为这实际上只是一个指针
void undoVector(Vector *v, Vector *undoVec)
我做错了什么?为什么这个功能不起作用?如果需要,我可以粘贴更多代码或提供更多信息,谢谢。
void add(Vector *v, Element elem) {
if (v->size == v->capacity) {
isFull(v);
}
v->elems[v->size] = elem;
v->size++;
}
Element getElem(Vector *v, int pos) {
return v->elems[pos];
}
【问题讨论】:
-
堆栈更适合撤消功能。
-
我现在只需要能够应用撤消一次,这是我们被建议采用的方式。知道为什么它不起作用吗?
-
你能告诉我们
getElement和add函数吗?你检查过v的值有没有变化? -
您是否在
undoVector函数中分配了v = copyVector(undoVec);?如果是这样,那只会改变undoVector中的参数值,而不是你调用函数的值。 -
我粘贴了 add 和 getElem 的代码。 undoVector 的参数是指向向量的指针,所以它们不应该被修改吗?他们确实在我的其他功能中得到了修改,所以..