Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
 Аватар для exe-dealer
308 / 161 / 11
Регистрация: 07.06.2009
Сообщений: 538

почему не delete (выделение памяти)

09.06.2009, 19:32. Показов 1304. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
почему в примерах в мсдне не высвобождается память после использования asctime, ctime?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <time.h>
#include <stdio.h>
 
int main( void )
{
    struct tm   *newTime;
    time_t      szClock;
 
    // Get time in seconds
    time( &szClock );
 
    // Convert time to struct tm form 
    newTime = localtime( &szClock );
 
    // Print local time as a string.
    printf_s( "Current date and time: %s", asctime( newTime ) ); // C4996
    // Note: asctime is deprecated; consider using asctime_s instead
}
нужно ведь сохранить указатель на сторку, которую вернула asctime и после использования удалить через delete[], или я идиот?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.06.2009, 19:32
Ответы с готовыми решениями:

Динамическое выделение памяти под массив структур (new/delete)
Люди добрые, подскажите пожалуйста, где в моем коде закралась ошибка? Интернет перечитал, во всех примерах код, подобный моему работает, а...

Выделение памяти под массив в классе. Почему не могу правильно выделить?
Все привет! не могу понять почему в классе не получается выделить память из стека для массива. Есть класс: Надо чтоб конструктор класса...

delete[] *pointer vs. delete pointer и утечка памяти
Здравствуйте! Есть класс &quot;умного&quot; указателя counted_ptr, который удаляет хранящийся в нём T* owned; только если кол-во владельцев...

8
Заказ софта
 Аватар для Search..
343 / 188 / 21
Регистрация: 26.05.2009
Сообщений: 863
09.06.2009, 19:41
Майкрософт всегда прав... =)
0
MCSD: APP BUILDER
 Аватар для IT_Exp
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
09.06.2009, 19:44
нужо. только не delete[] а free

почему
ненавязчивый намёк юзать безопасные (_s) версии функций? :gigi:
1
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
09.06.2009, 21:48
Цитата Сообщение от exe-dealer Посмотреть сообщение
.... нужно ведь сохранить указатель на сторку, которую вернула asctime и после использования удалить через delete[], или я идиот?
А MSDN почитать?
"asctime uses a single, statically allocated buffer to hold the return string."
Так что delete[], равно как и free, приведут всего лишь к UB.
0
MCSD: APP BUILDER
 Аватар для IT_Exp
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
09.06.2009, 22:03
asctime uses a single, statically allocated
практика показывает расхождение с теорией
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
_TSCHAR * __cdecl _tasctime (
    REG1 const struct tm *tb
    )
{
    REG2 _TSCHAR *p = buf;
    errno_t e = 0;
 
    _TSCHAR *retval;            /* holds retval pointer */
    _ptiddata ptd = _getptd_noexit();
 
    /* Use per thread buffer area (malloc space, if necessary) */
    if (ptd) {
#ifdef _UNICODE
        if ( (ptd->_wasctimebuf != NULL) || ((ptd->_wasctimebuf =
            (wchar_t *)_calloc_crt(_ASCBUFSIZE, sizeof(wchar_t))) != NULL) )
            p = ptd->_wasctimebuf;
#else  /* _UNICODE */
        if ( (ptd->_asctimebuf != NULL) || ((ptd->_asctimebuf =
            (char *)_calloc_crt(_ASCBUFSIZE, sizeof(char))) != NULL) )
            p = ptd->_asctimebuf;
#endif  /* _UNICODE */
    }
 
    retval = p;         /* save return value for later */
 
 
    e = _tasctime_s( p, _ASCBUFSIZE, tb );
    if ( e != 0 )
    {
        return NULL;
    }
 
    return (retval);
}
single-то он single, но совсем не statically, а очень даже dynamically.
1
 Аватар для exe-dealer
308 / 161 / 11
Регистрация: 07.06.2009
Сообщений: 538
09.06.2009, 22:09  [ТС]
вот и я запутался, вроде бы когда натравливаешь delete на статический или автоматический масив, то access voulation, а там все вроде бы удаляется без ошибок.
зы А насчет free теперь буду знать, я думал там с++, (неделю как с++ учу, совсем новичок)
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
10.06.2009, 00:16
Rififi, я - не согласен с твоими аргументами.... С точки зрения прикладного программиста (а не разработчика CRT библиотеки!) он (буфер) - вполне себе статический. Прикладной программист не выделяет его - и поэтому не должен никогда пытаться освободить, если нет на то явных указаний от разработчиков CRT в мануале (а их - нет!). Где и как освобождаетcя эта память - знают разработчики CRT (ну и мы, конечно, но нам туды лезть шустрыми шаловливыми ручонками запрещено )
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
_CRTIMP void
WINAPI _freefls (
    void *data
    )
{
    /*
     * Free up the _tiddata structure & its malloc-ed buffers.
     */
// ....................
        if(ptd->_asctimebuf)
            _free_crt((void *)ptd->_asctimebuf);
// ....................
}
А эта самая замечательная функция автоматически вызывается для каждого потока при его завершении и "подчищает" за ним. Последствия неуместного пользовательского free нетрудно видеть.
От оно как......
0
MCSD: APP BUILDER
 Аватар для IT_Exp
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
10.06.2009, 12:08
CheshireCat,
мдэ, неправ был насчет asctime... провел прямую аналогию с strdup..
попытка обмануть ms провалилась (Ж
впрочем, если бы мне нужно было получить строку, я бы все равно юзал бы *_s, куда подается "честный" буфер (:
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
10.06.2009, 13:05
И получил бы непереносимый (жестко привязанный к компилятору от M$) код......
Вот за что я не люблю M$ - так это за подобные жульнические проделки и "усовершенствования".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.06.2009, 13:05
Помогаю со студенческими работами здесь

Очистка памяти с delete[]
Нужно очистить память перед закрытием программы. Но не могу этого сделать выдает Exception thrown at 0x00FAA3F5 in Project9.exe:...

Очистка памяти delete[];
Есть функция ввида: void loltest(int md3) { char* randChars; int cCount; if(md3 &lt;= 0) cCount = 13; ...

Delete[] и утечка памяти
Как можно избежать вытока памяти? И вообще почкму криво работает? #include&lt;iostream&gt; #include&lt;windows.h&gt; #include&lt;ctime&gt; ...

delete[] статической памяти
1. Должна ли возникать ошибка (или падение программы) при применении delete к статической памяти? У меня (Microsoft Visual Studio 2005)...

Утечка памяти и delete
Вот накопились вопросы про утечки памяти. 1) Как проявляется утечка памяти? На многих сайтах написано что если не удалять указатели то...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru