BDD 조작을 위해 CUDD 패키지를 사용하고 있습니다. DdManager라는 큰 데이터 구조의 복사본을 만들고 싶습니다. 문제는 :이 데이터 구조 안에 포인터가 너무 많아서 직접 복사를하면 "얕은"복사본 (일부는 용어를 사용함)이됩니다. 즉, 새로운 복사 점의 포인터가 같은 위치로 향하게됩니다 ~에 대한 원본 복사본에 의해, 그래서 내가 그들 중 누구에게나 변경되면 나는 또한 다른 바람직하지 않은 변화 ... 데이터 구조가 정말 크고 매우 상세한 때문에 수동으로 복사 기능을 만들려고 노력하지 않습니다 다른 복잡한 구조에 많은 포인터도 !!! 벡터 솔루션을 시도한 here을 설명했지만 많은 중첩 구조와 포인터가 있기 때문에 예상 된 결과를 얻지 못했으며 완전히 새로운 복사본이 필요합니다. 데이터 구조가 다른 많은 포인터 정말 크고 매우 상세한 때문에포인터가있는 구조체를 내부에 복사하는 방법은 무엇입니까?
가#include <iostream>
#include <cstdlib>
#include <string.h>
#include <vector>
using namespace std;
struct n1
{
int a;
char *b;
};
struct n2
{
int **c;
struct n1 *xyz;
};
typedef struct
{
vector<struct n2> x;
}X;
int main()
{
struct n2 s1;
s1.xyz = (struct n1*)malloc(sizeof(struct n1));
s1.xyz->a = 3;
s1.xyz->b = (char*)malloc(5);
s1.xyz->b[0] = '\0';
strcat(s1.xyz->b,"Mina");
s1.c = (int**)malloc(5 * sizeof(int*));
for(int i = 0; i < 5; i++)
s1.c[i] = (int*)malloc(5 * sizeof(int));
for(int i = 0; i < 5; i++)
for(int j = 0 ; j < 5 ; j++)
s1.c[i][j] = i + j;
X struct1,struct2;
vector<struct n2>::iterator it;
it = struct1.x.begin();
it = struct1.x.insert(it,s1);
it = struct2.x.begin();
it = struct2.x.insert(it,struct1.x[0]);
cout<<"struct2.x[0].c[1][2] = "<<struct2.x[0].c[1][2] <<" !"<<endl; // This is equal to 3
(struct2.x[0].c[1][2])++; //Now it becomes 4
cout<<"struct2.x[0].c[1][2] = "<<struct2.x[0].c[2][2] <<" !"<<endl; //This will print 4
cout<<"s1.c[1][2] "<< s1.c[1][2]<<" !"<<endl; // This will also print 4 ... that's the wrong thing
return 0;
}
'vector'를 사용하는 것 같지만 그렇지 않으면 C 스타일의 코드입니까? – unkulunkulu
나에게 C++과 비슷한 것처럼 보입니다. C에서는 문자열 상수로 이동할 수 없습니다. – wildplasser
"데이터 구조가 실제로 크기가 크고 매우 상세하기 때문에 수동으로 복사 기능을 시도하는 것은 불가능합니다."- 죄송합니다.하지만 그게 인생입니다. 그게 바로 당신이해야 할 일입니다. – cdarke