Перейти к содержанию
    

помогите. возникла проблема при выделении динамической памяти под структуру.

 

вот сама структура

struct sMENU_WIN  {
                      byte **labelname;            // строка меню.
                      byte i_labelname;            // длина labelname.
                      bit  f_flag;                 // поддержка флага.
                      bit  flag;                   // состояние флага.
                      bit  f_goto;                 // поддержка перехода.
                      byte ptr_fgoto;              // "переход"
                      bit  f_func_exe;
                      byte *ptr_func_exe;
                  };

struct _window_   {
                     struct sMENU_WIN *_win; 
                  };

struct sMENU      {
                     byte PP;                       //
                     byte *stack;                   //
                     byte *stack_1;                 //
                     
                     struct _window_ ss0;           //window#0 
                     struct _window_ ss1;           //window#1
                  };
                    
struct _window_ *p_window_[2];                      //кол-во окон!
struct sMENU _menu_;                                //

 

это я делаю для удобства.

void ini_p_window(&_menu_);

void ini_p_window(struct sMENU *p)
{
   p_window_[0] = &p->ss0; // main
   p_window_[1] = &p->ss1; // window 1
}

 

 

а вот сама функция для выделения памяти и инициализации

void ini_struct(&_menu_);

void ini_struct(struct sMENU *ptr)
{

...

   (*p_window_[0])._win = (struct sMENU_WIN*)malloc(13*sizeof(struct sMENU_WIN));
   
   if((*p_window_[0])._win == NULL){ _puts(1, 0, mem_err); return;}
   else                            { _puts(1, 0, OK); }

...

 

при выделении до (6*sizeof(struct sMENU_WIN) все работает нормально. а если больше 6, то возникает ошибка.

 

если в структуре вместо struct sMENU_WIN *_win; написать struct sMENU_WIN _win[13];

то все будет работать хорошо. но мне нужно чтобы выделялась динамически

Изменено пользователем CAHTA_1939

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

при выделении до (6*sizeof(struct sMENU_WIN) все работает нормально. а если больше 6, то возникает ошибка.
Так посмотрите, сколько памяти вы отвели под HEAP. И посчитайте, сколько запрашиваете. Еще учтите, что кроме выделения вам N байт памяти резервируется несколько служебных для поддержания кучи, т.е. память под кучу надо резервировать с запасом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

угу, уже посмотрел. там по стандаргу выделенно чтото около 80. я поставил 2048... откуда будет отниматься эта память из озу или из пзу?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

угу, уже посмотрел. там по стандаргу выделенно чтото около 80. я поставил 2048... откуда будет отниматься эта память из озу или из пзу?
По какому стандарту? :07: Что-то я не слышал, чтобы объекты динамически размещались в ПЗУ. Кончно из ОЗУ. Загляните в .xcl - там это все указывается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...