Node *z = (Node *)malloc(sizeof(Node*));
// ...
x = q.top();
을
typedef struct NODE{
long long int freq;
string s;
struct NODE* left;
struct NODE* right;
}Node;
int main(){
priority_queue<Node*,vector<Node*>, compare > q;
Node* root;
scanf("%d",&n);
int power = find_power(n);
string a;
long long int b,total;
for (int i=1; i<=n; i++) {
Node* tmp = (Node*)malloc(sizeof(Node*));
cin >> a >> b;
tmp->freq = b;
tmp->s = a;
tmp->left = NULL;
tmp->right = NULL;
q.push(tmp);
}
scanf("%lld",&total);
result_fix = power * total;
for (int i=1; i<n; i++) {
Node *z = (Node *)malloc(sizeof(Node*));
Node* x = (Node *)malloc(sizeof(Node*));
Node* y = (Node *)malloc(sizeof(Node*));
x = q.top();
q.pop();
y = q.top();
q.pop();
z->left = x;
z->right = y;
z->s = "";
z->freq = x->freq + y->freq;
q.push(z);
free(x);
free(y);
}
root = (Node *)malloc(sizeof(Node*));
root = q.top();
q.pop();
if (!q.empty()) {
printf("Queue is not empty!\n");
}
find_bit(root,0);
printf("%lld\n",result_fix);
printf("%lld\n",result_huff);
return 0;
를 도와주세요,이 정의되지 않은 동작입니다 : 당신이 Node*
를 저장하는 데 필요한 메모리를 할당
Node
에 대한 메모리가 필요할 때;
malloc
과 함께 메모리를 할당하면 메모리가 초기화되지 않은 채 남아 있습니다. 개체가 생성되지 않습니다. 그런 다음 영향을 주면 (x = q.top();
) 구성되지 않은 개체에 Node::operator=
이 호출됩니다.
해결책으로 저는 C++을 배우고 C 클래스를 쓰지 말 것을 제안합니다. 그러나보다 구체적인 솔루션으로 :
Node z = q.top;
또는
Node *const z = new Node(q.top);
출처
2017-11-08 13:10:57
YSC
당신이 C를 사용하는 것처럼 당신은 왜 코딩 C++를 사용하는 경우? '(Node *) malloc (sizeof (Node *));'(그리고 틀리게) – CoryKramer
'string'이 선언되지 않습니다. 'priority_queue'는 선언되지 않았습니다. 'vector'는 선언되지 않습니다. – melpomene
구조체를 typedef'ing하는 이유는 무엇입니까? 'typedef struct NODE {...} Node; '뒤에는'NODE','Node','struct NODE'의 3 가지 타입이 있습니다. – melpomene