wlshddlek   3년 전

우선 답은 맞았습니다. 그런데 밑에 코드 메모리를 동적할당받으면 틀렸다고 뜨고 동적할당 받지않으면 맞다고 합니다. 이유가 뭘까요?? 동적할당 받는 부분은 밑에 코드에 표시해두었습니다.

sait2000   3년 전

되도록이면 맞은 코드 말고 틀린 코드를 올려주세요. 한 글자도 안 바꾸고 그대로 올리는 게 좋습니다.

61번 줄에서 일어나는 일은 새로 할당한 메모리에 있는 데이터를 배열에다 복사하는 겁니다. 그리고 나서 새로 할당한 메모리는 할당만 되어있고 누수가 되고 있네요. 즉 애써 동적할당 받은 메모리를 반환도 안 하고 갖다 버리고 있습니다. 아무튼 이 때 데이터를 배열에 복사하기 때문에 노드의 v vector가 초기화됩니다. 그런데 문제에 보면 어떤 노드의 부모의 인덱스가 노드의 인덱스보다 작다는 조건이 없으니까, 자식이 부모보다 인덱스가 작은 경우는 이미 자식이 v에 인덱스를 넣어놓은 게 초기화가 되겠죠.

wlshddlek   3년 전

그렇군요 감사합니다ㅠ  그런데 사실 진짜 질문은 이거입니다 부탁드립니다 ㅠ    아까랑 똑같은 부분을 바꿔서 제대로 동적할당을 해주는데 런타임 에러가 발생했습니다 ㅠㅜ

 

#include
#include


using namespace std;

class node
{
public:
int data;
vector v;

};

node* nodes[55];
int cut = 0;
int results;

void tree_search(node* current)
{

int ss = current->v.size();

for (int i = 0; i < current->v.size(); i++)
{
int next = current->v[i];
if (next == cut)
{
ss--;
}
else
{
tree_search(nodes[next]);
}
}

if (ss == 0)results++;

return;
}

int main()
{

ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);


int n;
cin >> n;

int root = 0;


for (int i = 0; i < n; i++)
{
int n1;
cin >> n1;
nodes[i] = new node();    //
nodes[i]->data = i;        ///    이두줄에서는 제대로 동적할당을 하고있는데 런타임 에러가 발생합니다 ㅠ 무엇이 문제일까요??
if (n1 == -1)
{
root = i;
continue;
}

nodes[n1]->v.push_back(i);

}

cin >> cut;



if (cut == root)
{
cout << 0 << "\n";
return 0;
}

tree_search(nodes[root]);


cout << results << "\n";

for (int i = 0; i < n; i++)
{
delete(nodes[i]);
}

return 0;
}

댓글을 작성하려면 로그인해야 합니다.