0

ツリーのような BFS を作成しようとしています。木を作って子を並べました。

ここにコードを書きましたhttps://github.com/cengek/CKDatastruct

しかし不思議なことに、Windows と MinGW を使用してコンパイルすると、エラーが返されます。OSX および Linux では発生しません。

私の友人は、mallocを使用するとエラーになると言いました。

エラーが発生する特定のコードがどこにあるのかわかりませんが、ここにあると思います

これは、ツリーの子をキューに入れる部分です

   while (isEmpty(antrianNodes) != 1) {

        //tampilkan isinya
        printf("%c,", antrianNodes.first->paket.s->c);

        simpul * now = antrianNodes.first->paket.s;

        simpul * nodePertama = now;


        //jika punya anak
        //masukkan child dari node alamat di queue ke dalam queue sekarang

        if(now->child != NULL){
            simpul * nowchild = now->child;

            //jika punya saudara
            if(nowchild->sibling != NULL){

                //looping memasukkan anak-anak
                while (nowchild->sibling != now->child) {
                    add(&antrianNodes, nowchild);
                    nowchild = nowchild->sibling;
                }
                //masukkan yang terakhir
                add(&antrianNodes, nowchild);
            }else{
                //tak punya saudara masukkan saja satu
                add(&antrianNodes, nowchild);
            }
        }

        del(&antrianNodes);
    }

ここでは、子をキューに追加して処理できるようにします。子供のプリントをします。

void add(queue *Q, simpul *s){
elemen * baru = (elemen *) malloc(sizeof(elemen));
baru->paket.s = (simpul *) malloc(sizeof(simpul));
baru->paket.s = s;
baru->next = NULL;
if(isEmpty(*Q) == 1){
    (*Q).first = baru;
    (*Q).last = baru;

}else{
    (*Q).last->next = baru;
    (*Q).last = baru;
}

(*Q).jumlahElemen++;

}

通常のキューとツリーのコードだと思います。

正直なところ、オペレーティングシステムごとに奇妙に異なるため、正確な部分がどこにあるのかわかりません。ideoneでコンパイルして、このhttp://ideone.com/vVNOeとして正しい結果を得ようとしました

私の友人は、Windowsからのエラーはこのようなものだと言いました

Problem signature:
Problem Event Name: APPCRASH
Application Name:   main.exe
Application Version:    0.0.0.0
Application Timestamp:  4fa665b6
Fault Module Name:  main.exe
Fault Module Version:   0.0.0.0
Fault Module Timestamp: 4fa665b6
Exception Code: c0000005
Exception Offset:   000015e0
OS Version: 6.1.7601.2.1.0.256.48
Locale ID:  1033
Additional Information 1:   0a9e
Additional Information 2: 0a9e372d3b4ad19135b953a78882e789
Additional Information 3:   0a9e
Additional Information 4: 0a9e372d3b4ad19135b953a78882e789

Read our privacy statement online:
http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0409

If the online privacy statement is not available, please read our privacy statement offline:

C:\Windows\system32\en-US\erofflps.txt

すべてのオペレーティング システムは異なる malloc を実行しますか? それとも、エラーを起こすのは私のコードだけですか?

宜しくお願いします

4

2 に答える 2

1

これがあなたの問題の原因かどうかはわかりませんが、そうかもしれません。ではadd()、 new を割り当ててsimpulそのポインターを に配置しますpaketが、すぐにそのポインターを に引数として渡されたポインターで上書きしますadd()

baru->paket.s = (simpul *) malloc(sizeof(simpul));
baru->paket.s = s;

確信はないけど。


また、makeTree()関数childはルート ノードのメンバーを初期化する必要があります。

baru->child=NULL;
于 2012-05-06T05:04:06.560 に答える
0

なんてこった、答えは私が作るのを忘れていたということbaru->child = NULLです.

コンピュータは新しい子が NULL ではないと判断したため、これが問題です。おそらくWindowsでは、新しい割り当て用にランダムなメモリアドレスが作成され、OSXまたはLinuxでは自動的にNULLに設定されます。

私の質問に答えようとしてくれてありがとう

よろしくギリ

于 2012-05-06T18:45:35.493 に答える