2012-05-06 36 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++; 

}

我认为这是队列和树的普通代码。

老实说,我不知道其确切的一部分,因为它在每个操作系统奇怪的不同,我已经尝试编译它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?还是只是我的代码做错误?

问候 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。

谢谢你们了你哪些尝试回答我的问题

问候 吉瑞

相关问题