Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2012, 20:03   #1
Axrik
Форумчанин
 
Аватар для Axrik
 
Регистрация: 17.12.2011
Сообщений: 111
Вопрос Структ. поля как элементы очереди

Добрый день.

Перейду сразу к проблеме. Программа читает из файла filename занесённые туда структуры (занесены с помощью fwrite()), а затем создаётся очередь из этих структур. Проблема с занесением в элементы очереди структурных данных. Дальше выделенного программа не идёт (до strcpy).
Вообщем, вот код.

Код:
struct film                  
{
 char *name;                 
 char *description;          
 char *genre;                
 int year;                    
 char *country;               
 char *director;             
 char *cast;                  
 int time;                    
 film *next;                  
};

_________

int Stack(film **head, char *filename)
{	
 FILE *f;
 f=fopen(filename,"a+t");
 film *str,a;

 a.name=(char*)calloc(100,sizeof(char));
 a.description=(char*)calloc(100,sizeof(char));
 a.genre=(char*)calloc(100,sizeof(char));
 a.director=(char*)calloc(100,sizeof(char));
 a.cast=(char*)calloc(100,sizeof(char));
 a.country=(char*)calloc(100,sizeof(char));
 
 str=(film*)calloc(100,sizeof(film));
 
 while(1)
 { 	
  if(feof(f))
   break;			
  fread(&a,sizeof(film),1,f); 
  if(str==NULL)
  {
   puts("Нет свободной памяти");
   getch();
   return 0;
  }
  else
  {     
   strcpy(str->name,a.name);                //проблема
   strcpy(str->description,a.description);
   strcpy(str->genre,a.genre);
   strcpy(str->country,a.country);
   strcpy(str->director,a.director);
   strcpy(str->cast,a.cast);
   str->next=(*head);
   (*head)=str;
  } 
 }
 free(&a);
 fclose(f);
}

__________

int main()                    
{
 film *head=NULL;
 char *s=(char*)calloc(100,sizeof(char));
 head=(film*)calloc(100,sizeof(film));
 Stack(&head,s);
}


И дополнительно хотелось бы узнать как занести в очередь int'овое структурное поле? (а именно a.year и a.time)

Заранее благодарна.

Последний раз редактировалось Axrik; 06.06.2012 в 23:59.
Axrik вне форума Ответить с цитированием
Старый 06.06.2012, 20:43   #2
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,327
По умолчанию

Для членов структуры "a" вы выделили место, а для членов структуры "str" - нет.
8Observer8 вне форума Ответить с цитированием
Старый 06.06.2012, 21:03   #3
Axrik
Форумчанин
 
Аватар для Axrik
 
Регистрация: 17.12.2011
Сообщений: 111
По умолчанию

Спасибо за замечание, но, к сожалению, это не помогло.
Axrik вне форума Ответить с цитированием
Старый 06.06.2012, 21:35   #4
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,327
По умолчанию

Вот что я имел ввиду:
Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct {
    char* name;
    char* description;
} film;

int main()
{
    film a, *str;

    // выделяем место для членов структуры a
    a.name=(char*)calloc(100,sizeof(char));
    a.description=(char*)calloc(100,sizeof(char));
    strcpy(a.name, "xxx");
    strcpy(a.description, "good");

    // выделяем место для структуры, на которую будет указывать str
    str=(film*) malloc(sizeof(film)) ;
    // выделяем место для членов структуры, на которую указывает str
    str->name=(char*)calloc(100,sizeof(char));
    str->description=(char*)calloc(100,sizeof(char));
    strcpy(a.name, "yyy");
    strcpy(a.description, "good");

    // освобождаем память членов сруктуры а
    free(a.name);
    free(a.description);
    // освобождаем память членов сруктуры, на которую указывает str
    free(str->description);
    free(str);
    // освобождаем память структуры, на которую указывает str
    free(str->name);
    return 0;
}
У меня вопрос появился. Нужно ли освобождать память членов структуры, на которую указывает str? Или достаточно освободить память на которую указывает str?
8Observer8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как нескольким потокам брать строку из одного списка по очереди? trafbite Общие вопросы Delphi 23 12.03.2012 19:34
Удаление звена списка (динам. структ) RaTeN Общие вопросы C/C++ 3 01.10.2011 15:53
как записать предпоследний элемент очереди в ячейку? taorange Паскаль, Turbo Pascal, PascalABC.NET 0 27.05.2010 21:38
Как из каталога открывать все файлы по очереди Poltev86 Общие вопросы Delphi 3 22.05.2010 15:38
как получить значение поля грид на основе значения другого lookUp поля malayka БД в Delphi 0 21.04.2010 19:06