2012-05-06 2 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

Мой друг сказал, что ошибка из окон, как этот

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

ли делать каждая операционная система по-разному таНос? Или это только мой код, который делает ошибку?

С наилучшими пожеланиями 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

Ну ладно, ты положил последнюю часть ответа, хе-хе, я это приму – giripp

0

Боже мой, ответ я забыл сделать baru->child = NULL.

Это проблема, потому что компьютер думал, что новый ребенок не является NULL. Возможно, в Windows он создает случайный адрес памяти для нового распределения, а OSX или Linux автоматически устанавливает его как NULL.

Спасибо, ребята за вас, которые пытаются ответить на мой вопрос

С наилучшими пожеланиями Гири

Смежные вопросы