eclipse中的CDT问题 我用Eclipse进行C++程序。
在运行代码时生成代码后,我得到的name.exe已停止工作错误。 同样的代码在这里运行良好 请帮助我查找此问题。eclipse中的CDT问题 我用Eclipse进行C++程序。,c++,pointers,eclipse-cdt,C++,Pointers,Eclipse Cdt,在运行代码时生成代码后,我得到的name.exe已停止工作错误。 同样的代码在这里运行良好 请帮助我查找此问题。 提前感谢。 我的代码: #include<iostream> #include<math.h> #include <cstdlib> using namespace std; struct node{ struct node * lc; struct node * rc; int data; }; typedef str
提前感谢。
我的代码:
#include<iostream>
#include<math.h>
#include <cstdlib>
using namespace std;
struct node{
struct node * lc;
struct node * rc;
int data;
};
typedef struct node Node;
Node * getNewNode(int data){
Node * node = NULL;
node = (Node*)malloc(sizeof(node));
node -> data = data;
node -> lc = NULL;
node -> rc = NULL;
return node;
}
Node * buildBst(Node * root,int data){
if(NULL == root){
return getNewNode(data);
}
if(data > root -> data){
root -> rc = buildBst(root->rc,data);
}else{
root -> lc = buildBst(root->lc,data);
}
return root;
}
void printInorder(Node * root){
if(root != NULL){
printInorder(root -> lc);
cout << root -> data << " ";
printInorder(root -> rc);
}
}
int main(int argc, char* argv[]) {
int arr [] = {2,3,4,1,5,9,0,3};
Node * root = NULL;
for(int i = 0;i < 6; ++i){
root = buildBst(root,arr[i]);
}
printInorder(root);
cout << endl;
}
#包括
#包括
#包括
使用名称空间std;
结构节点{
结构节点*lc;
结构节点*rc;
int数据;
};
typedef结构节点;
节点*getNewNode(int数据){
Node*Node=NULL;
node=(node*)malloc(sizeof(node));
节点->数据=数据;
节点->lc=NULL;
节点->rc=NULL;
返回节点;
}
节点*buildBst(节点*root,int数据){
if(NULL==根){
返回getNewNode(数据);
}
如果(数据>根->数据){
root->rc=buildBst(root->rc,数据);
}否则{
root->lc=buildBst(root->lc,数据);
}
返回根;
}
无效打印顺序(节点*根){
if(root!=NULL){
打印顺序(根->lc);
cout数据;
}
}
int main(int argc,char*argv[]){
int arr[]={2,3,4,1,5,9,0,3};
Node*root=NULL;
对于(int i=0;i<6;++i){
root=buildBst(root,arr[i]);
}
打印顺序(根);
CUT< P>因为使用C++,使用<代码>新< /COD>运算符,而不是<代码> MalOC < /C>,在调用MALOC的第十四次迭代或第四个节点创建时发生了崩溃,因为附加的调试加上了它,允许它处于调试模式(尽管技术上是UB,否则)可能是通过保护字节写的
同样,它在malloc代码上崩溃,因为您使用的是sizeof(node)
vssizeof(node)由于使用C++,请使用<代码>新< /Calp>运算符,而不是<代码> MalOC ,在调用MALOC的第十四次迭代或第四个节点创建时发生崩溃,由于附加的调试加上填充,允许在调试模式下(尽管技术上为UB,否则)可能是通过保护字节写的
同样,它在malloc代码上崩溃,因为您使用的是sizeof(node)
vssizeof(node)
使用GCC/G++的代码块可以正确编译和运行它,您是否设置了任何编译器标志?否。我没有设置任何编译器标志。调试版本正常,但发布版本没有。尽管我很好奇为什么您没有使用新的
运算符。使用GCC/G++的代码块可以正确编译和运行它,您是否设置了任何编译器我没有设置任何编译器的标记,调试版本是好的,但发布不是。虽然我很好奇为什么你不使用<代码>新< /Cord>运算符。现在,要修正这个帖子的误解:在完全工作的标准库环境中,几乎不使用<代码>新< /代码>——在适当的现代C++编程中,Dynamic内存分配和释放由标准库内部处理-在容器或智能指针中。严肃地说,不要建议使用new
。按照我通常的动机,我没有尝试重新发明shantanu的轮子,而是让代码按原样工作。这正是我建议使用new(C++)vs malloc的原因(C)同样,在程序设计的世界里,有多种方法进入程序库,我大部分时间都保持了他/她的路径。现在,要解决这个问题的错误观念:在完全工作的标准库环境中,在现代C++中,几乎从不使用<代码>新< /代码>。编程、动态内存分配和释放由标准库内部处理-在容器或智能指针中。严肃地说,不要建议使用new
。按照我通常的动机,我没有尝试重新发明shantanu的轮子,而是让代码按原样工作。这正是我建议使用new的原因(C++)与malloc(C),但给出了保持malloc正常工作的方法。同样,在编程世界中,有不止一种方法可以到达总部,我只是在很大程度上保持了他/她的路径不变。