2013-12-25 3 views
0

При компиляции возникает ошибка, но я не уверен, что. Я пережил все это несколько раз и не могу понять, почему.Дробные двоичные сбой при компиляции

Кроме того, есть ли какие-либо другие вещи, которые я должен сделать, чтобы улучшить этот кусок кода вообще?

#include <stdlib.h> 
#include <stdio.h> 

//create structure to hold node 
typedef struct node 
{ 
int data; 
struct node *left; //lower no./points to left node 
struct node *right; //higher no./points to right node 
} node; 

void insert(node **rt, int val)  //insertion function 
{ 
node *tmp; 

if(*rt == NULL){ 
    tmp = (node *) malloc(sizeof(node));  //allocates memory for node 
    if (tmp == NULL) 
    { 
     printf(stderr, "Unable to allocate node\n"); 
     exit(1); 
    } 
    tmp->data = val; 
    *rt = tmp; 
} 
else{ 
    if(val > (*rt)->data) 
     insert(&(*rt)->right, val); 
    else 
     insert(&(*rt)->left, val); 
} 
} 

void print_node(node *head)   //starts with head/first node until NULL 
{ 
if(head == NULL) 
    return; 

if(head->left != NULL) 
    print_node(head->left); 
    printf("data = %d\n", head->data); 

if(head->right != NULL) 
    print_node(head->right); 
} 

int main(int argc, char *argv[]) 
{ 
int value[6] = {20,10,5,17,30,21};  //values put into array 
int i;         //i count 
node *head = NULL; 
    for(i = 0; i < 6; i++)    //loop array 
    { 
     insert(&head, value[i]); 
    } 

print_node(head);    //recursive search 

return 0; 
} 
+3

При компиляции или при запуске? Катастрофа была бы странной. Если при запуске вы должны отлаживать, чтобы сузить проблему. – Dukeling

ответ

1

код кажется, не пропустите инициализацию left и right членов свежа выделены node.

Чтобы исправить эту вставку после этой строки

tmp->data = val; 

недостающее инициализации, как это:

tmp->left = NULL; 
    tmp->right = NULL; 

Также код пропускает распечатать значения справа узлов.

0

в этой линии printf(stderr, "Unable to allocate node\n"); Я думаю, вы имели в виду fprintf(stderr, "Unable to allocate node\n");

+0

Это беспокоит, что код скомпилирован с этой ошибкой. Он предлагает архаичный компилятор и отсутствующие файлы заголовков. Сказав это, код содержит '', поэтому действительно не является оправданием для компилятора не жаловаться на злоупотребление' printf() ', что может означать, что код был« дезинфицирован »для представления на ТАК. Ик! –

+0

Вы правы, он обязательно должен сменить компилятор. он отлично работал после того, как я исправил эту «опечатку». –

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