Форум программистов, компьютерный форум CyberForum.ru

Удаление записи из бинарного файла - C++

Восстановить пароль Регистрация
 
Lahden
1 / 1 / 0
Регистрация: 26.09.2013
Сообщений: 52
20.03.2014, 19:14     Удаление записи из бинарного файла #1
Задача - удалить запись из бинарного запись по имени
find находит запись, которую нужно удалить
cur - текущая позиция
del - удаляемая запись
осталось переписать записи, но вылетает ошибка (насколько понимаю, проблемы с памятью)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    m_r = find (name);
    if(!m_r)
        return false;
    long cur (_tell (m_f));
    long del (cur - m_r -> getLen());
    long offset = LS;
    char* s = new char[1];
    short len;
    while (_read (m_f, &len, LS))
    {
        delete s;
        s = new char [len];
        _lseek (m_f, -offset, SEEK_CUR);
        _read (m_f, s, len);
        cur = _tell (m_f);
        _lseek (m_f, -(cur-del), SEEK_CUR);
        _write (m_f, s, len);
        del = _tell (m_f);
        _lseek (m_f, (cur-del), SEEK_CUR);
    }
    m_n--;
    _chsize(m_f, SEEK_CUR);
    return true;
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.03.2014, 20:04     Удаление записи из бинарного файла #2
Цитата Сообщение от Lahden Посмотреть сообщение
но вылетает ошибка (насколько понимаю, проблемы с памятью)
Уверены, что в выложенном коде?
Lahden
1 / 1 / 0
Регистрация: 26.09.2013
Сообщений: 52
20.03.2014, 23:10  [ТС]     Удаление записи из бинарного файла #3
нет, не уверен, она еще в просмотре состояния может быть, хотя до удаления там все работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CRecord* CMyFile :: view (long position) const
{
    if(position == 0L)
        _lseek (m_f, 0L, SEEK_SET);
    long offset = LS;
    char* s = new char[1];
    short len;
    _read (m_f, &len, LS);
    delete s;
    s = new char [len];
    _lseek (m_f, -offset, SEEK_CUR);
    _read (m_f, s, len);
    m_r -> makeObj (s);
    return m_r;
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.03.2014, 23:27     Удаление записи из бинарного файла #4
Зачем здесь, вообще, нужно динамическое выделение памяти? Утечки.
Lahden
1 / 1 / 0
Регистрация: 26.09.2013
Сообщений: 52
20.03.2014, 23:30  [ТС]     Удаление записи из бинарного файла #5
метод возвращает 1 запись и я использую его в цикле
C++
1
2
3
4
5
6
7
8
9
10
11
void CMenu :: view () const
{
    int n(m_ctrl -> getN());
    cout << *(m_ctrl -> view (0)) << endl;
    int i(1);
    while (i<n)
    {
        cout << *(m_ctrl -> view (-1)) << endl;;
        i++;
    }
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.03.2014, 00:09     Удаление записи из бинарного файла #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Lahden Посмотреть сообщение
метод возвращает 1 запись и я использую его в цикле
И что? Если использовать выделение памяти на сткеке, то возвращать не будет?

Добавлено через 1 минуту
Цитата Сообщение от Lahden Посмотреть сообщение
C++
1
2
3
4
5
6
7
...
s = new char [len];
_lseek (m_f, -offset, SEEK_CUR);
_read (m_f, s, len);
m_r -> makeObj (s);
return m_r;
...
Здесь выделили память, где она освобождается?

Добавлено через 30 минут
Цитата Сообщение от Lahden Посмотреть сообщение
нет, не уверен, она еще в просмотре состояния может быть
Отладчиком умеете пользоваться?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2014, 23:28     Удаление записи из бинарного файла
Еще ссылки по теме:

C++ Удаление записей из бинарного файла
C++ Редактирование записи бинарного файла
C++ Удаление бинарного файла

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

Или воспользуйтесь поиском по форуму:
Lahden
1 / 1 / 0
Регистрация: 26.09.2013
Сообщений: 52
24.03.2014, 23:28  [ТС]     Удаление записи из бинарного файла #7
alsav22, спасибо за наводки, ошибка оказалась в _chsize_s, исправил и теперь все работает отлично)
Yandex
Объявления
24.03.2014, 23:28     Удаление записи из бинарного файла
Ответ Создать тему
Опции темы

Текущее время: 05:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru