Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 20.09.2017
Сообщений: 134

Ошибка при освобождении памяти

14.08.2018, 12:49. Показов 1047. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Короче, есть простенький метод класса, в котором за полем под названием ID закрепляется новое айди. При это память, в которой хранилось предыдущее значение айди должна, по-идее, освобождаться. Для этого был создан указать str. Но когда дело доходит до строки c "delete", то программа выдаёт ошибку. Точно такое же явление наблюдается и при вызове деструктора. Предоставляю имеющиеся методы класса:

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
35
36
namespace account
{
 
    Account::Account() : dbMaxSum(50000)
    {
        chID = "#0";
        chOwnerName = "xxx";
        dbSum = 0;
    }
 
    Account::Account(char* id, char* name, double sum) : dbMaxSum(50000)
    {
        chID = id;
        chOwnerName = name;
        dbSum = sum;
    }
 
    void Account::setID(char* id)
    {
        char *str = chID;
        chID = id;
    //  delete str;
    }
 
    char* Account::getID()
    {
        return chID;
    }
 
    Account::~Account()
    {
    //  delete chID;
    //  delete chOwnerName;
    }
 
}
Если что, то при инициализации строковых полей класса была предоставлена память для их хранения ключевыми словами
C++
1
new char
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.08.2018, 12:49
Ответы с готовыми решениями:

Ошибка при освобождении памяти
Здравствуйте. Знаю, что тема уже много раз поднималась в самых разнообразных местах и с очень отличающимися примерами, но, увы, я тоже с...

Ошибка при освобождении памяти
Условие задачи: В текстовом файле посчитать количество строк, а также для каждой отдельной строки определить количество в ней символов и...

Ошибка при освобождении памяти?
Доброго времени суток! Я только-только взялся за изучение c++. Дошел до динамической памяти (разбираю по учебнику) и столкнулся с...

12
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
14.08.2018, 13:00
Цитата Сообщение от berkut234 Посмотреть сообщение
C++
1
2
chID = id;
chOwnerName = name;
так делать не желательно, используй strcpy
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
14.08.2018, 13:01
Цитата Сообщение от berkut234 Посмотреть сообщение
При это память, в которой хранилось предыдущее значение айди должна, по-идее, освобождаться. Для этого был создан указать str.
Чтоб "освобождалась", надо использовать std::string. Указатель ничего не выделяет и не освобождает. Он только указывает. В случае = "#0" - указывает на статическую строчку, которая существует все время программы. Функции удаления у нее вообще не предусмотрено.
Цитата Сообщение от berkut234 Посмотреть сообщение
Если что, то при инициализации строковых полей класса была предоставлена память для их хранения ключевыми словами
new char выдает память под один символ.
0
1 / 1 / 0
Регистрация: 20.09.2017
Сообщений: 134
14.08.2018, 13:16  [ТС]
Спасибо. Выделив память через new char [15] всё заработало. Но с функцией strcpy проблемка выходит: компилятор выдаёт ошибку, мол функция может быть небезопасной. Но программа при этом работает нормально.
Миниатюры
Ошибка при освобождении памяти  
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
14.08.2018, 14:39
berkut234, сделайте как просит компилятор - добавьте макрос #define _CRT_SECURE_NO_WARNINGS перед включением заголовочных файлов или используйте проприетарную функцию strcpy_s от Microsoft (не рекомендую).
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
14.08.2018, 14:49
Цитата Сообщение от berkut234 Посмотреть сообщение
Спасибо. Выделив память через new char [15] всё заработало.
Тогда уж:
C++
1
2
3
4
5
6
struct Account
{
    //...
    char chID[15];
    //...
};
Если что, delete в таком варианте не нужно.

Добавлено через 1 минуту
Цитата Сообщение от MrGluck Посмотреть сообщение
или используйте проприетарную функцию strcpy_s от Microsoft
Оно не от Microsoft, оно от C11.
0
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
14.08.2018, 15:20
Цитата Сообщение от Renji Посмотреть сообщение
Оно не от Microsoft, оно от C11
Эти функции не обязательны для реализации.
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
14.08.2018, 15:30
Цитата Сообщение от Croessmah Посмотреть сообщение
Эти функции не обязательны для реализации.
в смысле не стандартные?
0
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
14.08.2018, 15:36
Цитата Сообщение от _stanislav Посмотреть сообщение
в смысле не стандартные?
В смысле они опциональны и могут отсутствовать.
При вызове конструктора ошибка: L "Buffer is too small" & & 0
0
1 / 1 / 0
Регистрация: 20.09.2017
Сообщений: 134
14.08.2018, 16:18  [ТС]
Цитата Сообщение от MrGluck Посмотреть сообщение
berkut234, сделайте как просит компилятор - добавьте макрос #define _CRT_SECURE_NO_WARNINGS перед включением заголовочных файлов или используйте проприетарную функцию strcpy_s от Microsoft (не рекомендую).
Помогло. Только за что отвечает это определение?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
14.08.2018, 18:04
Цитата Сообщение от berkut234 Посмотреть сообщение
Помогло. Только за что отвечает это определение?
Как раз за то, чтобы компилятор не рекомендовал использовать "безопасные" функции вместо "небезопасных".
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
14.08.2018, 18:04
Цитата Сообщение от berkut234 Посмотреть сообщение
Помогло. Только за что отвечает это определение?
Как раз за то, чтобы компилятор не рекомендовал использовать "безопасные" функции вместо "небезопасных".
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
14.08.2018, 23:42
Цитата Сообщение от MrGluck Посмотреть сообщение
"безопасные" функции вместо "небезопасных".
я вообще говорю зачем антивирусы, если вирусы устанавливают сами пользователи? пока тот кто сидит за ПК не кликнет вирус не встанет.
Цитата Сообщение от MrGluck Посмотреть сообщение
Как раз за то, чтобы компилятор не рекомендовал использовать "безопасные" функции вместо "небезопасных".
все равно не вылезед из своего кусочка памяти да?

Добавлено через 2 минуты
операционная система нынче умная, или нет?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.08.2018, 23:42
Помогаю со студенческими работами здесь

Ошибка при освобождении памяти
Все идет замечательно, но вот когда происходит удаление массива программа крашится.. #include <iostream> using namespace...

Ошибка при освобождении памяти
Здравствуйте! Пишу на MS Visual C++ 2010, windows 7. При вызове функции resize() на строке delete arr; происходит ошибка,...

Ошибка при освобождении памяти
Задача: Из стандартного входного потока вводятся сроки. Признаком завершения каждой сроки является символ ‘\n’. Признаком конца текста...

Ошибка при освобождении памяти
Здравствуйте, программа завершает работу в этом коде #include <iostream> #include <ctime> #include <cmath> int...

Ошибка при освобождении памяти
#include <iostream> using namespace std; #include <stdlib.h> #include <fstream> #include <stdio.h> void *malloc (size_t...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru