реклама на сайте
подробности

 
 
> Динамический массив структур, Создание / удаление
YChebisheva
сообщение May 5 2009, 09:25
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 21
Регистрация: 9-01-09
Пользователь №: 43 070



К примеру у меня есть структура и я хочу работать с динамическим массивом, правильно ли будет:
Код
typedef struct {
            DWORD               Debug;
            char               *Oerr;
            char                Oerr_num;
            WORD                Data_FC;
                char                Nfunc;
          } SProba;
...
int num = 3;
SProba *dat = (SProba*) malloc(sizeof(SProba) * num);
SProba *elem = &dat[1];
elem->Oerr = (char*) malloc(10);
....
for(i = 0; i < num; i++)
   free(dat[i]->Oerr;
free(dat);
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Злодей
сообщение May 5 2009, 12:05
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 149
Регистрация: 29-04-08
Из: Петербург
Пользователь №: 37 142



Простите, а разве нельзя? Типа было под него выделено ни сколько памяти, и освободиться ни сколько....
Если это неправильно, то уже есть в структуре размер массива Oerr: Oerr_num. Освобождая проверять его...

Код
for(i = 0; i < num; i++)
{
     if ( dat[i]->Oerr_num > 0 )
     {
          free(dat[i]->Oerr);
     }
}
free(dat);


Но это непринципиально, интересно, почему нельзя освобождать память если её не выделяли.
Go to the top of the page
 
+Quote Post
Палыч
сообщение May 5 2009, 12:28
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Злодей @ May 5 2009, 15:05) *
интересно, почему нельзя освобождать память если её не выделяли.
Наверное, потому, что при выделении памяти её (память) никто не обнуляет, и там - некий мусор, который может быть воспринят как "правильные" данные, и таки память будет "освобождена" (о чем менеджер кучи будет уведомен; к этой памяти "пришиты" указатели на другие участки кучи, которые (указатели) будут изменены; при этом, по-видимуму, испортятся некие нужные Вам данные (уж куча разрушится точно!) и т.д.)...

P.S. Прочитал что написал - сумбурно получилось... Другими словами: при освобождении памяти с помощью free менеджер кучи не имеет возможности проверить - точно ли выделялся этот участок памяти или программист ошибся; и, скорее всего, его "освободит" с непредсказуемыми последствиями.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- YChebisheva   Динамический массив структур   May 5 2009, 09:25
- - Oldring   Цитата(YChebisheva @ May 5 2009, 13:25) f...   May 5 2009, 09:32
- - YChebisheva   Oldring, описалась. Понятно, что скобку не закрыла...   May 5 2009, 11:15
|- - Палыч   Цитата(YChebisheva @ May 5 2009, 14:15) А...   May 5 2009, 11:46
|- - Сергей Борщ   Цитата(Злодей @ May 5 2009, 15:05) Прости...   May 5 2009, 13:14
- - _Pasha   Цитата(YChebisheva @ May 5 2009, 12:25) К...   May 5 2009, 13:22
|- - Палыч   Цитата(_Pasha @ May 5 2009, 16:22) но тол...   May 5 2009, 13:31
|- - _Pasha   Цитата(Палыч @ May 5 2009, 16:31) Разве m...   May 5 2009, 15:07
- - YChebisheva   Ребята это я виновата, Вас всех запутала. Понятно,...   May 5 2009, 14:02
|- - Палыч   Цитата(YChebisheva @ May 5 2009, 17:02) М...   May 5 2009, 14:17
- - YChebisheva   Как понимаю особой разницы malloc и calloc нет, пр...   May 6 2009, 06:31
|- - _Pasha   Цитата(YChebisheva @ May 6 2009, 09:31) ...   May 6 2009, 06:35
- - YChebisheva   у меня ещё вопрос возник по части объема, которая ...   May 6 2009, 08:28
|- - Палыч   Цитата(YChebisheva @ May 6 2009, 11:28) и...   May 6 2009, 09:07
|- - _Pasha   Если мы(Вы) имеем дело с С99 и gnu99, можно смело ...   May 6 2009, 10:25
|- - zltigo   Цитата(_Pasha @ May 6 2009, 13:25) Если м...   May 6 2009, 10:54
|- - _Pasha   Цитата(zltigo @ May 6 2009, 13:54) fast, ...   May 6 2009, 15:13
- - Злодей   Здесь сказано: ЦитатаРазмер структуры выравниваетс...   May 6 2009, 09:50
- - YChebisheva   А как определить, какой у меня компилятор, если пи...   May 6 2009, 10:47
- - YChebisheva   с типами разобралась. А может лучше объявить всю с...   May 6 2009, 12:04
|- - zltigo   Цитата(YChebisheva @ May 6 2009, 14:56) А...   May 6 2009, 12:09
- - YChebisheva   . А как определить, какой у меня компилятор, если...   May 6 2009, 12:33


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 11th August 2025 - 06:31
Рейтинг@Mail.ru


Страница сгенерированна за 0.02267 секунд с 7
ELECTRONIX ©2004-2016