1

C++ プログラムに eclipse を使用しています。

コードを実行しているときにコードをビルドした後、name.exe が動作を停止しましたというエラーが表示されます。http://codepad.org/2c5xFbLMで同じコードが正常に動作しています。

この問題を見つけるのを手伝ってください。
前もって感謝します。
私のコード:

#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;
}
4

1 に答える 1

4

C++ を使用しているため、 のnew代わりに演算子を使用mallocすると、malloc の呼び出しで 14 回目の反復、または 4 回目のノード作成でクラッシュが発生しました。それ以外の場合)、おそらくガード バイトを介して書き込みます。

同様に、sizeof(node)vsを使用していたため、malloc コードでクラッシュしましたsizeof(Node)

于 2012-10-21T06:40:40.687 に答える