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

Вызвано исключение по адресу

25.04.2018, 20:27. Показов 5781. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
При запуске фунции пишет такую ошибку "Вызвано исключение по адресу 0x00007FFBC36EBA28 (ucrtbased.dll) в ConsoleApplication3.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0x000002A69CD86000"
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
37
38
39
void find_(string date)
{
    ifstream file("test2.txt");
    if (!file.is_open()) {
        cout << "Ошибка!!! Файл не удается открыть.";
    }
    string str;
    int size = 0, size1 = 0, size2 = 0, size3 = 0, day_int = 0, month_int=0, year_int=0;
    return_date(year_int, month_int, day_int);
    int *day = new int[size];
    int *month = new int[size1];
    int *year = new int[size2];
    string *date_=new string[size3];
    int count = 0;
    while (!file.eof()) {
        getline(file, str);
        push_back(date_, size3, 1);
        push_back(day, size, 1);
        push_back(month, size1, 1);
        push_back(year, size2, 1);
        int pos = str.find_first_of(' ');
        char *str_ = "";
        str_ = preobr(date_[count]);
        char *str2 = preobr(str);
        strncpy(str_, str2, pos);
        date_to_int(str_,day[count], month[count],year[count]);
        if (day[count] > day_int - 7)
            cout << str<<endl;
        count++;
    }
    delete[] day;
    delete[] month;
    delete[] year;
    delete[] date_;
    file.close();
    system("pause");
    //system("cls");
 
}
Вот код, ошибка где то в цикле while. Я понимаю что это утечка памяти, но ничего найти не могу. Вот в таком виде файл
23.04.2018 ASUS 540LJ Телефон 2300
12.04.2018 BRAVIS A510 Ноутбук 350
25.4.2018 LG Телефизор 600
Вот функции которые я использую
C++
1
2
3
4
5
6
7
8
9
10
char  *preobr(string str)
{
    unsigned int dlina;
    dlina = str.length();
    char *arr = new char[dlina];
    for (unsigned int i = 0; i < dlina; i++)
        arr[i] = str[i];
    return arr;
    delete[] arr;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void date_to_int(string date, int &day_, int &month_, int &year_)
{
    char *arr = preobr(date);
    char day[3], month[3], year[5];
    for (int i = 0; i < 2; i++)
    {
        day[i] = arr[i];
    }
    month[0] = arr[3];
    month[1] = arr[4];
    year[0] = arr[6];
    year[1] = arr[7];
    year[2] = arr[8];
    year[3] = arr[9];
    day_ = atoi(day);
    month_ = atoi(month);
    year_ = atoi(year);
    //cout << day_ << "  " << month_ << "  " << year_ << endl;
}
C++
1
2
3
4
5
6
7
8
9
10
void return_date(int &year, int &month, int &day)
{
    time_t seconds = time(NULL);
    tm* timeinfo = localtime(&seconds);
    //cout << "Current Datetime:" << asctime(timeinfo) << endl;
    year = timeinfo->tm_year + 1900;
    month = timeinfo->tm_mon + 1;
    day = timeinfo->tm_mday;
    //cout << day << "." << month << "." << year << endl;
}
Главная проблема в том что все периодически работает без ошибок.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.04.2018, 20:27
Ответы с готовыми решениями:

Вызвано исключение по адресу 0x013C1891 в Jacobi.exe: 0xC0000005: нарушение прав доступа при чтении по адресу
#include &lt;math.h&gt; const double eps = 0.001; ///&lt; желаемая точность /// N - размерность матрицы; A - матрица коэффициентов, F -...

Вызвано исключение по адресу 0x003F2357 в Лабораторна 15.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0x
Что это такое и как это исправить? Вот фрагмент кода где и есть проблема: ... int size = 9; int **intMas =...

Вызвано исключение по адресу 0x01068781 в 2nd.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0xCCCCCCCC
Доброго времени суток, кто может помочь по вопросу? Постоянно выбивает ошибку. Мне кажется, там еще память не выделена, но я не полностью...

11
Модератор
Эксперт С++
 Аватар для zss
13769 / 10962 / 6491
Регистрация: 18.12.2011
Сообщений: 29,236
25.04.2018, 20:52
Цитата Сообщение от sherman_ Посмотреть сообщение
int size = 0, size1 = 0, size2 = 0, size3 = 0,
Цитата Сообщение от sherman_ Посмотреть сообщение
int *day = new int[size];
int *month = new int[size1];
int *year = new int[size2];
string *date_=new string[size3];
И чего же Вы ожидаете от масивов длиной 0?
0
82 / 78 / 34
Регистрация: 13.02.2018
Сообщений: 1,347
25.04.2018, 20:55
zss,
Цитата Сообщение от sherman_ Посмотреть сообщение
Главная проблема в том что все периодически работает без ошибок.
не стыковочка получается.
либо код старый либо автор что-то не договаривает.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
25.04.2018, 20:59
Во-первых, preobr() не может освободить память, так как после return операторы не имеют смысла. Значит, память надо освободить в вызывающей функции - date_to_int().
Да и зачем вообще преобразовывать в этот древний формат? Бери просто подстроку из string и преобразуй в число - stoi().

В первом фрагменте все size нулевые и не могут использоваться для выделения памяти.
0
1 / 1 / 0
Регистрация: 11.02.2017
Сообщений: 28
25.04.2018, 21:03  [ТС]
push_back расширяет массив, думал это понятно
C++
1
2
3
4
5
6
7
8
9
void push_back(int *&arr, int &size, unsigned short int sizeup)//увеличение кол-ва элемнтов массива
{
    int *arr2 = new int[size + sizeup];//создаем массив указателей на обьект с размером на sizeup больше чем было
    for (int i = 0; i < size; i++)
        arr2[i] = arr[i];//заполнаем новый массив старым
    size += sizeup;//запоминаем новый размер массива
    delete[] arr;//очищаем память старого массива
    arr = arr2;//старый масив приравнием к новому
}
Добавлено через 2 минуты
за массивы с 0 элементами ответил, а с char мне нужна функция strncpy, хотя ее и самому не составит труда написать

Добавлено через 1 минуту
код написан вчера, а не договорил только за push_back
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
25.04.2018, 21:03
Лучший ответ Сообщение было отмечено sherman_ как решение

Решение

Делай всё на string.
1
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
25.04.2018, 21:07
Цитата Сообщение от sherman_ Посмотреть сообщение
Главная проблема в том что все периодически работает без ошибок.
UB, однако...
0
1 / 1 / 0
Регистрация: 11.02.2017
Сообщений: 28
25.04.2018, 21:16  [ТС]
пробую написать strcpy для string
C++
1
2
3
4
5
6
7
void strcpy__(string &str_1, string &str_2, int pos)
{
    for (int i = 0; i < pos; i++)
    {
        str_1[i] = str_2[i];
    }
}
но ошибка при передачи второго символа
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
25.04.2018, 21:23
Цитата Сообщение от nmcf Посмотреть сообщение
В первом фрагменте все size нулевые и не могут использоваться для выделения памяти.
Могут.

Добавлено через 2 минуты
Цитата Сообщение от sherman_ Посмотреть сообщение
пробую написать strcpy для string
Зачем?
0
1 / 1 / 0
Регистрация: 11.02.2017
Сообщений: 28
25.04.2018, 21:25  [ТС]
Мне же нужно взять все символы до пробела, а strcpy для string не работает.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
25.04.2018, 21:29
Лучший ответ Сообщение было отмечено sherman_ как решение

Решение

Цитата Сообщение от sherman_ Посмотреть сообщение
Мне же нужно взять все символы до пробела, а strcpy для string не работает.
У std::string своих методов полно: http://www.cplusplus.com/reference/string/string/
1
1 / 1 / 0
Регистрация: 11.02.2017
Сообщений: 28
26.04.2018, 00:19  [ТС]
В итоге я не знаю где была ошибка, но при переделывании в string все работает. Всех благодарю за ответы. Всего вам наилучшего.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.04.2018, 00:19
Помогаю со студенческими работами здесь

Вызвано исключение по адресу!
// ConsoleApplication3lab2.cpp: определяет точку входа для консольного приложения. // // ConsoleApplication2.cpp: определяет точку...

Вызвано исключение по адресу подскажите
Вот такая ошибка: &quot;Вызвано исключение по адресу 0x0FD6F809 (msvcp140d.dll) в переполнение.exe: 0xC0000005: нарушение прав доступа при...

Ошибка: Вызвано исключение по адресу
Всем привет вот исходный код: #include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;time.h&gt; #include &lt;stdlib.h&gt; #include...

Вызвано исключение по адресу. Работа с указателями
В Visual Studio 17 выводит ошибку Вызвано исключение по адресу 0x013E2897 в Source.exe: 0xC0000005: нарушение прав доступа при записи по...

Выдает ошибку Вызвано исключение по адресу
Выдает ошибку Вызвано исключение по адресу 0x0F9F63BB (ucrtbased.dll) в ConsoleApplication2.exe: 0xC0000005: нарушение прав доступа при...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru