![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Toohtik |
|
|||
![]() Шустрый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 142 Регистрация: 30.1.2006 Где: Харьков Репутация: нет Всего: нет |
Взялся писать курсовой. Его задание написать прогу которая читает txt файлы и отображает информацию о нем (размер, количество букв, слов...) Интрефейс под Win32. Возник вопрос, стоит ли писать класс File в котором будет содератся инофрмация о файле и в котором можно будит считать/сохранить из файла или просто реализовать функциями?
И воторой:
Обязателько ли перед тем как выделить новую, осводить старую и не лучше ли использваоть new delete? Это сообщение отредактировал(а) Toohtik - 12.4.2007, 20:34 |
|||
|
||||
fantast |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 10.12.2006 Где: минск, столица на шей Родины Репутация: 2 Всего: 2 |
если ты не сделаешь free то просто затрешь старый указатель на ранее выделенную память, и впоследствии не сможешь ею воспользоваться или хотяб освободить, а новой выделенной памятью будешь пользоваться в полной мере. Можно конечно и не освобождать, но это приведет к утечке памяти. а new delete работает точно также, поэтому если и тут не освобождать, то результат будет идентичный лично я не вижу между ними никаких принципиальных различий --------------------
Эпитафия: Он старался. Неизвестный |
|||
|
||||
console |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 307 Регистрация: 12.2.2007 Где: Belarus::Minsk Репутация: 1 Всего: 3 |
new/delete - это для С++, calloc и прочая фень - СИ...
Для твоего случая конечно лучше new/delete и я думаю реализовать класс лучше... А вот это предложение ты объясни поподробнее... ))) |
|||
|
||||
fantast |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 10.12.2006 Где: минск, столица на шей Родины Репутация: 2 Всего: 2 |
это только твое дело, но мне кажется если самые светлые умы программирования всетаки сделали такую замечательную штуку как класс, ей грех не воспользоватья, программа станет намного нагляднее и красивее. --------------------
Эпитафия: Он старался. Неизвестный |
|||
|
||||
leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: 1 Всего: 5 |
alloc или new - это имхо без разницы, главное, не пытаться освободить память оператором delete, если вы её получили функцией calloc. new - более стандартный способ.
освобождать память надо, только не забудьте в конструкторе обнулить cText и проверять cText != NULL. |
|||
|
||||
fantast |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 10.12.2006 Где: минск, столица на шей Родины Репутация: 2 Всего: 2 |
console,
ну над этим можно и поспорить, что new/delete, что calloc/free, теже яйца, только в профиль --------------------
Эпитафия: Он старался. Неизвестный |
|||
|
||||
Toohtik |
|
|||
![]() Шустрый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 142 Регистрация: 30.1.2006 Где: Харьков Репутация: нет Всего: нет |
Ну имеется в виду что память особождать только после заверешения программы, а не каждый раз перед открытием файла.
Просто меня смущает вопрос, что если открыть текст размером 100 байт а потом к примеру 50 байт, то если не особождая перед откртием, память просто затрется, но в воздухе повиснит оставшиеся 50байт. Получается их уже нельзя не осободить не использовать, тоесть происходит утечка, я прав? |
|||
|
||||
fantast |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 10.12.2006 Где: минск, столица на шей Родины Репутация: 2 Всего: 2 |
для этого если используешь calloc есть функция realloc, которая меняет длинну массива выделенного динамически.
ну а если new тогда надо каждый раз зачищать delete вот
да, ты прав. это никуда не годится Это сообщение отредактировал(а) fantast - 12.4.2007, 20:58 --------------------
Эпитафия: Он старался. Неизвестный |
|||
|
||||
leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: 1 Всего: 5 |
это правда курсовая????
|
|||
|
||||
fantast |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 10.12.2006 Где: минск, столица на шей Родины Репутация: 2 Всего: 2 |
если ты напишешь:
то у тебя ничего не затрется, просто ты выделишь 100 байт и вернешь на них указатель в ch, а после этого выделишь еще 50 байт и опять запишешь на них указатель в ch. получается что указатель на первые 100 байт просто потерялся и ты не сможешь получить к ним доступ потому что банально не знаешь где они находятся а ch будет указывать на 50 байт. поэтому ты потеряешь не 50 байт а все 100. --------------------
Эпитафия: Он старался. Неизвестный |
||||
|
|||||
Toohtik |
|
|||
![]() Шустрый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 142 Регистрация: 30.1.2006 Где: Харьков Репутация: нет Всего: нет |
А как воспользоватся функций realloc?
Да это курсовой 2 курса. Были и потруднее темы но там блин игры писать брррр ненавижу ![]() |
|||
|
||||
Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
М-ду calloc и new [] есть существенная разница ---
1) calloc не вызвает конструкторы, в отличие от new[] 2) new[] не обнуляет выделенную память. В отличие от calloc -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
console |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 307 Регистрация: 12.2.2007 Где: Belarus::Minsk Репутация: 1 Всего: 3 |
Пример с cplusplus.com:
|
|||
|
||||
fantast |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 10.12.2006 Где: минск, столица на шей Родины Репутация: 2 Всего: 2 |
ну это ты зря кажется так void* realloc(void *mass,int size); *mass - указатель на динамический массив (уже созданный при помощи функции malloc или calloc) size - новый размер массива в байтах функция возвращает новый указатель на динамический массив (в дльнейшем использовать именно его) --------------------
Эпитафия: Он старался. Неизвестный |
|||
|
||||
console |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 307 Регистрация: 12.2.2007 Где: Belarus::Minsk Репутация: 1 Всего: 3 |
Как видим из примера с cplusplus.com в моем предыдущем посте, не обязательно перед этим резервировать память calloc'ом либо malloc'ом
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |