Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка выполнения 
:(
    Опции темы
qw1mb0
Дата 10.3.2012, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Непутевый студент
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 24.4.2010
Где: Севастополь

Репутация: нет
Всего: нет



Добрый день. Читаю книгу "В.В.Подбельский и С.С. Фомин Программирование на языке С"
перепечатал пример про двоичные деревья
Код

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXLINE 80
struct node{
    char *str;
    struct node *left;
    struct node *right;
};
int main(int argc, char *argv[])
{
    struct node *add_node(struct node *root, char *line);
    void Print(struct node *ptr);
    struct node *root = NULL;
    FILE *fp;
    char line[MAXLINE];
    if((fp=fopen("input.txt","rt")) != NULL)
    {
        while(fgets(line,MAXLINE, fp))
            root = add_node(root, line);
    }
    else
    {
        perror("input.txt");
        return -1;
    }
    Print(root);
    return 0;
}

struct node *add_node(struct node *root, char *line)
{
    struct node **prior;
    struct node *ptr;
    struct node *new_node(char *line);
    if(root != NULL)
    {
        ptr = root;
        while (ptr != NULL)
            if(strcmp(line, ptr->str)<=0)
            {
                prior = &ptr->left;
                ptr = ptr->left;
            }
            else
            {
                prior = &ptr->right;
                ptr = ptr->right;
            }
            *prior = new_node(line);
            return root;

    }
    return new_node(line);
}

struct node *new_node(char *line)
{
    struct node *ptr;
    ptr->str = (char *)malloc(strlen(line)+1);
    strcpy(ptr->str, line);
    ptr->left=ptr->right = NULL;
    return ptr;
}

void Print(struct node *ptr)
{
    int i = 0;
    struct node *stack[10];
    while(1)
    {
        while(ptr != NULL)
        {
            stack[i++]=ptr;
            ptr = ptr->left;
        }
        ptr = stack[--i];
        if(i<0) break;
        printf("%s", ptr->str);
        ptr = ptr->right;
        }
}



Но при выполнении ничего не происходит, а только вылетает ошибка выполнения. 
файл input.txt:
namel
lol
mean
aname
falas

В чем может быть проблема?
PM MAIL ICQ Skype   Вверх
borisbn
Дата 10.3.2012, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Обращай внимания на warning'и. Мне, например, компилятор сразу выдал, что на 60-й строке используется ptr, который никуда не указывает...
В общем, замани 59-ю строку на
Код
struct node *ptr = (struct node*)malloc(sizeof(struct node));




--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
qw1mb0
Дата 10.3.2012, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Непутевый студент
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 24.4.2010
Где: Севастополь

Репутация: нет
Всего: нет



Странно, мне компилятор никаких варнингов не выдвинул... Спасибо большое. Заработало, а не могли бы вы объяснить более детально, как влияет измененный код ?

Добавлено через 40 секунд
Я так понимаю, что мы выделяем память под указатель, который указывает на структуру, так?
PM MAIL ICQ Skype   Вверх
bsa
Дата 10.3.2012, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



qw1mb0, указатель лишь содержит адрес на область памяти. А уж что лежит там, зависит от программиста. Почитай тут про указатели и ссылки.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0432 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.