Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
[错误]未分配要释放的指针 我在C++中用STL来练习树的BFS代码,我有一个运行时错误,我不能调试。如果我不调用 PROTUTE()函数< /C>,一切都正常。 请帮助我,因为我是STL的新手 #include<iostream> #include<malloc.h> //on llvm we don't need this #include<list> using namespace std; typedef struct Node{ int val; struct Node* left; struct Node* right; }node; void push(node** root,int val) { if(!(*root)) { node* temp=(node*)malloc(sizeof(node)); temp->val=val; temp->right=temp->left=NULL; *root=temp; } else if(val<(*root)->val) push(&((*root)->left),val); else push(&((*root)->right),val); } void printout(node* head) { node* temp; temp=head; list<node*>qu; //using bfs here while(temp!=NULL) { cout<<temp->val<<endl; if(temp->left!=NULL) qu.push_back(temp->left); if(temp->right!=NULL) qu.push_back(temp->right); temp=qu.front(); qu.pop_front(); //free(temp); } } int main() { node* root=NULL; push(&root,3); push(&root,4); push(&root,1); push(&root,10); push(&root,2); printout(root); }_C++_Gcc_Stl_Malloc_Llvm - Fatal编程技术网

[错误]未分配要释放的指针 我在C++中用STL来练习树的BFS代码,我有一个运行时错误,我不能调试。如果我不调用 PROTUTE()函数< /C>,一切都正常。 请帮助我,因为我是STL的新手 #include<iostream> #include<malloc.h> //on llvm we don't need this #include<list> using namespace std; typedef struct Node{ int val; struct Node* left; struct Node* right; }node; void push(node** root,int val) { if(!(*root)) { node* temp=(node*)malloc(sizeof(node)); temp->val=val; temp->right=temp->left=NULL; *root=temp; } else if(val<(*root)->val) push(&((*root)->left),val); else push(&((*root)->right),val); } void printout(node* head) { node* temp; temp=head; list<node*>qu; //using bfs here while(temp!=NULL) { cout<<temp->val<<endl; if(temp->left!=NULL) qu.push_back(temp->left); if(temp->right!=NULL) qu.push_back(temp->right); temp=qu.front(); qu.pop_front(); //free(temp); } } int main() { node* root=NULL; push(&root,3); push(&root,4); push(&root,1); push(&root,10); push(&root,2); printout(root); }

[错误]未分配要释放的指针 我在C++中用STL来练习树的BFS代码,我有一个运行时错误,我不能调试。如果我不调用 PROTUTE()函数< /C>,一切都正常。 请帮助我,因为我是STL的新手 #include<iostream> #include<malloc.h> //on llvm we don't need this #include<list> using namespace std; typedef struct Node{ int val; struct Node* left; struct Node* right; }node; void push(node** root,int val) { if(!(*root)) { node* temp=(node*)malloc(sizeof(node)); temp->val=val; temp->right=temp->left=NULL; *root=temp; } else if(val<(*root)->val) push(&((*root)->left),val); else push(&((*root)->right),val); } void printout(node* head) { node* temp; temp=head; list<node*>qu; //using bfs here while(temp!=NULL) { cout<<temp->val<<endl; if(temp->left!=NULL) qu.push_back(temp->left); if(temp->right!=NULL) qu.push_back(temp->right); temp=qu.front(); qu.pop_front(); //free(temp); } } int main() { node* root=NULL; push(&root,3); push(&root,4); push(&root,1); push(&root,10); push(&root,2); printout(root); },c++,gcc,stl,malloc,llvm,C++,Gcc,Stl,Malloc,Llvm,在每次迭代中调用qu.front(),而不检查qu是否为空。如果它是空的——最终它会是空的——代码就会中断 最简单的解决方案是检查qu是否为空: if (qu.empty()) { temp = NULL; } else { temp=qu.front(); qu.pop_front(); //free(temp); } 然而,这看起来很奇怪。我会完全改变循环并使用!qu.empty()作为while循环的条件 list<node*> qu; qu.

在每次迭代中调用
qu.front()
,而不检查
qu
是否为空。如果它是空的——最终它会是空的——代码就会中断

最简单的解决方案是检查
qu
是否为空:

if (qu.empty()) {
    temp = NULL;
} else {
    temp=qu.front();
    qu.pop_front();
    //free(temp);
}
然而,这看起来很奇怪。我会完全改变循环并使用
!qu.empty()
作为
while
循环的条件

list<node*> qu;
qu.push_back(head);
while(!qu.empty()) {
    node* temp = qu.front();
    qu.pop_front();
    if(temp->left)
        qu.push_back(temp->left);
    if(temp->right)
        qu.push_back(temp->right);
    //free(temp);
}
列表;
q.向后推(头);
而(!qu.empty()){
节点*temp=qu.front();
前曲波普;
如果(临时->左)
向后推(温度->左侧);
如果(临时->右侧)
向后推(温度->右侧);
//免费(临时);
}

当你到达树中的最后一片“叶子”时,
temp->left
temp->right
都是
NULL
,你会得到一个空的qu列表。 调用
qu.front()
会导致空列表上出现未定义的行为:


您可以在调用前面之前添加一个大小检查。

如果您想编写标准C++,请用<代码> <代码>替换<代码> <代码> >
list<node*> qu;
qu.push_back(head);
while(!qu.empty()) {
    node* temp = qu.front();
    qu.pop_front();
    if(temp->left)
        qu.push_back(temp->left);
    if(temp->right)
        qu.push_back(temp->right);
    //free(temp);
}