我尝试像树一样创建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);
}
并在这里将childs添加到队列中,以便我可以处理它。它做了孩子的印刷品。
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
答案 0 :(得分:1)
我不确定这是否是您问题的原因,但可能是。在add()
中,您分配一个新的simpul
并将该指针放入paket
,但随后您立即用add()
作为参数传递的指针覆盖该指针:
baru->paket.s = (simpul *) malloc(sizeof(simpul));
baru->paket.s = s;
但我不确定。
此外,您的makeTree()
函数需要初始化根节点的child
成员:
baru->child=NULL;
答案 1 :(得分:0)
天啊,答案是我忘记了baru->child = NULL
。
这就是问题,因为计算机认为新的孩子不是NULL。也许在Windows中它为新分配创建随机内存地址,OSX或Linux自动将其设置为NULL。
感谢那些试图回答我问题的人
最诚挚的问候 吉瑞