Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.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
eclipse中的CDT问题 我用Eclipse进行C++程序。_C++_Pointers_Eclipse Cdt - Fatal编程技术网

eclipse中的CDT问题 我用Eclipse进行C++程序。

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

在运行代码时生成代码后,我得到的name.exe已停止工作错误。 同样的代码在这里运行良好

请帮助我查找此问题。
提前感谢。
我的代码:

#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)
vs
sizeof(node)由于使用C++,请使用<代码>新< /Calp>运算符,而不是<代码> MalOC ,在调用MALOC的第十四次迭代或第四个节点创建时发生崩溃,由于附加的调试加上填充,允许在调试模式下(尽管技术上为UB,否则)可能是通过保护字节写的


同样,它在malloc代码上崩溃,因为您使用的是
sizeof(node)
vs
sizeof(node)

使用GCC/G++的代码块可以正确编译和运行它,您是否设置了任何编译器标志?否。我没有设置任何编译器标志。调试版本正常,但发布版本没有。尽管我很好奇为什么您没有使用
新的
运算符。使用GCC/G++的代码块可以正确编译和运行它,您是否设置了任何编译器我没有设置任何编译器的标记,调试版本是好的,但发布不是。虽然我很好奇为什么你不使用<代码>新< /Cord>运算符。现在,要修正这个帖子的误解:在完全工作的标准库环境中,几乎不使用<代码>新< /代码>——在适当的现代C++编程中,Dynamic内存分配和释放由标准库内部处理-在容器或智能指针中。严肃地说,不要建议使用
new
。按照我通常的动机,我没有尝试重新发明shantanu的轮子,而是让代码按原样工作。这正是我建议使用new(C++)vs malloc的原因(C)同样,在程序设计的世界里,有多种方法进入程序库,我大部分时间都保持了他/她的路径。现在,要解决这个问题的错误观念:在完全工作的标准库环境中,在现代C++中,几乎从不使用<代码>新< /代码>。编程、动态内存分配和释放由标准库内部处理-在容器或智能指针中。严肃地说,不要建议使用
new
。按照我通常的动机,我没有尝试重新发明shantanu的轮子,而是让代码按原样工作。这正是我建议使用new的原因(C++)与malloc(C),但给出了保持malloc正常工作的方法。同样,在编程世界中,有不止一种方法可以到达总部,我只是在很大程度上保持了他/她的路径不变。