2012-05-06 14 views
0

ツリーのようなBFSを作成しようとしています。私は木を作って子供を待っていた。Mallocのオペレーティングシステム間で異なる結果

私はここにコードを書いています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++; 

}

私はそれがキューと木の通常のコードだと思います。

このhttp://ideone.com/vVNOe

私の友人は、エラーを言ったように正直なところ、私はそれがすべてのオペレーティングシステムで妙に違うんので、私はideoneでそれをコンパイルしようと、正しい結果が得られました正確な部分を知りません窓からこの

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 \は

すべてのオペレーティングシステムが異なるのmallocをするのかをerofflps.txt?それともエラーを起こすのは私のコードですか?

よろしく giripp

+4

にお答えしようとするあなたのための

みんなありがとう! – Oleksi

+5

すべてのコードを読むだけでいいと思いますか?どうして?関連部分をここに入れてください。 – littleadv

+0

@Oleksi私の友人たちはスクリーンショットをしています。 main.exeは動作を停止しました Windowsは問題を解決するためにオンラインで確認できます – giripp

答えて

1

私はこれがあなたの問題の原因であるかどうか分からないが、それはあるかもしれません。 add()では、新しいsimpulを割り当て、paketにそのポインタを置くが、その後すぐにadd()への引数として渡されたものとそのポインタを上書き:

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

しかし、私はよく分かりません。


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

baru->child=NULL; 
+0

ありがとう、残念ながら、エラーはまだ存在します。私はエラーの詳細を入れました。私はいくつかの研究をしており、割り当てられていないメモリを使用していると言いました。しかし、私はどのような記憶があるのか​​わからない、私は思い出を見ることができることを願っています:) – giripp

+0

ああまあ大丈夫答えの最後の部分を置く、heheh、私はそれを受け入れるよ – giripp

0

神私のああ、答えは私がbaru->child = NULLを作るのを忘れています。

コンピュータが新しい子がNULLではないと思ったので、それは問題です。おそらく、Windowsでは新しい割り当て用のランダムなメモリアドレスを作成し、OSXまたはLinuxは自動的にNULLに設定します。エラーだったもの私の質問

よろしく ギリ

関連する問題