【发布时间】:2015-10-29 19:55:57
【问题描述】:
我正在尝试为我的结构构建一个深拷贝功能。在主程序中,我尝试将 a 深度复制到 c 中,所以最后它应该打印字符串“B”。我究竟做错了什么?我知道我现在缺少一些晦涩的指针。
#include <iostream>
using namespace std;
struct Thing {
size_t length;
std::string txt;
struct Thing *things[];
};
struct Thing *deepCopy(struct Thing *origin) {
Thing tmp;
tmp.length = origin->length;
for(int i=0;i<tmp.length; ++i)
tmp.things[i] = deepCopy(origin->things[i]);
return &tmp;
}
int main() {
Thing a, b, *c;
a.length = 1;
a.things[0] = &b;
a.txt = "A";
b.txt = "B";
b.length = 0;
c = deepCopy(&a);
cout<<c->txt;
return 0;
}
【问题讨论】:
-
启用所有警告,问题就会很明显(在 gcc 中是
-Wall)。将来会对您有所帮助。 -
C++ 和 C 的完美结合!
-
除了已经提到的本地参数地址之外,这里还有一个未定义的行为
struct Thing *things[];