Я пытаюсь создать функцию глубокой копии для моей структуры. В основной программе я пытаюсь глубоко скопировать a в c, чтобы, наконец, напечатать строку «B». Что я делаю не так? Я знаю, что есть некоторые неясные вещи-указатели, которые мне сейчас не хватает.Структура глубокой копии C++
#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;
}
Включите все предупреждения, и проблема будет очевидна (это '-Wall' в gcc). Это поможет вам в будущем. – milleniumbug
какая нечестивая смесь C++ и C! – SergeyA
Помимо упомянутого уже локального аргумента, у вас также есть неопределенное поведение 'struct Thing * things [];' – SergeyA