Форум программистов, компьютерный форум, киберфорум
Boost C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
7 / 7 / 3
Регистрация: 19.03.2010
Сообщений: 182

При boost::scoped_ptr<udp::socket> reset вылетает 0xC0000005

18.02.2016, 16:24. Показов 1872. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В конструктор класса подаются io_service и int port.
На строчке в конструкторе
C++
1
2
3
4
 
рSocket_.reset(new udp::socket(io_service, udp::endpoint(udp::v4(), port)));
 
// pSocket_  определен private свойством класса как: boost::scoped_ptr<udp::socket> pSocket_;
выдается ошибка:
Unhandled exception at 0x77C72372 (ntdll.dll) in MGCPserver.exe: 0xC0000005: Access violation writing location 0x00000004.
При этом visual studio указывает строчку в подключаемой библиотеке win_mutex.hpp в месте
C++
1
2
3
4
5
6
7
8
9
10
11
class win_mutex
  : private noncopyable
{
public:
  typedef boost::asio::detail::scoped_lock<win_mutex> scoped_lock;
  // что-то...
  // Lock the mutex.
  void lock()
  {
    ::EnterCriticalSection(&crit_section_); // стрелочка указывает сюда
  }
Еще эта ошибка возникает не при создании первого объекта этого класса, а второго (порты подаются: в первый раз 10000, второй раз 10002). Т.е. в первый раз сокет нормально reset)

Добавлено через 20 минут
Короче, какие есть идеи из-за чего это? У меня кончились.
Правда, есть смутное подозрение, что io_service все рушит...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.02.2016, 16:24
Ответы с готовыми решениями:

Boost::asio::ip::udp::socket bind а мне нужен не локальный хост
Здравствуйте. Пытаюсь наладить для своих нужд пример #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;boost/asio.hpp&gt; ...

[boost::asio] UDP-server
Используя библиотеку boost::asio создаю udp-server. Но при запуске приложения, когда уже одно запущено, приложение выбрасывает исключение....

Помогите с boost::asio::udp
Суть проблемы в том что есть асинхронный Udp сервер в составе приложения реализованный на boost. Который просто принимает сообщения (и...

11
7 / 7 / 3
Регистрация: 19.03.2010
Сообщений: 182
18.02.2016, 16:44  [ТС]
Действительно,

Верхний вариант - первый вызов, нижний - второй.
Из-за чего так?
io_service в данном случае это private свойство класса(назовем его class1), объект которого создает объект класса(назовем его class2), в котором уже и появляется ошибка.
и при создании объекта из class2 в его конструктор передается io_service.
И если честно, я не понимаю, почему после создания первого объекта из class2 io_service "обнуляется".
Подскажите, пожалуйста.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
18.02.2016, 17:56
Цитата Сообщение от feck Посмотреть сообщение
class win_mutex
Мм а зачем? есть же std::/boost:: mutex
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
18.02.2016, 19:41
Цитата Сообщение от feck Посмотреть сообщение
И если честно, я не понимаю, почему после создания первого объекта из class2 io_service "обнуляется".
Сам io_service не обнуляется. У тебя вызов каким-то образом осуществляется посредством нулевого указателя.
Чтобы точнее сказать, нужно больше кода.
0
7 / 7 / 3
Регистрация: 19.03.2010
Сообщений: 182
19.02.2016, 10:28  [ТС]
DrOffset, вот вырезка. Вроде ничего важного не упустил.
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
class class1 : public boost::noncopyable
{
public:
    class1(asio::io_service& io_service);
    enum enmSTATE{ stInactive, stActive };
    enmSTATE State() const{ return state_; }
    void newInst(unsigned short port);
    void SetID(int ID){ Obj1ID = ID; }
    int GetID(){ return Obj1ID; }
private:
    std::mutex  mutex_;
    enmSTATE state_ = stInactive; 
    asio::io_service& io_service_;
    int Obj1ID; 
};
//-------------------------------------------------------------
void class1::newInst(unsigned short port)
{
    cout << "\nObj1ID=" << Obj1ID << "\nnew class2 start";
    SHP_class3 shpSrc(new class2(io_service_, port)); // создаем "проблемный" obj из class2 
    cout << "new class2 end";
}
//-------------------------------------------------------------
//-------------------------------------------------------------
//-------------------------------------------------------------
class class2
{
public:
    class2(boost::asio::io_service& io_service, unsigned short port);
private:
    boost::scoped_ptr<udp::socket> pSocket_; // при создании NULL
};
//-------------------------------------------------------------
class2::class2(boost::asio::io_service& io_service, unsigned short port)
{
    // проблема на следующей строчке
    pSocket_.reset(new udp::socket(io_service, udp::endpoint(udp::v4(), port)));
}
//-------------------------------------------------------------
typedef std::shared_ptr<class1> SHP_class1;
SHP_class1 CreateObj1(asio::io_service& io_service);
SHP_class1 FindObj1(int ID); 
//-------------------------------------------------------------
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
int main()
{
    asio::io_service io_service;
    std::vector<SHP_class1> VectorOfObj1_;
    int port = 10000; // задаем порт
    auto bar = CreateObj1(io_service); // создаем obj1
    bar->newInst(port); // вызываем его метод
    auto NewBar = FindObj1(0); // в векторе находим созданый obj1
    port = 10002; // новый порт
    if (NewBar->State() == class1::enmSTATE::stInactive) // проверка (в логике программы нужна, а тут не очень)
    {
        NewBar->newInst(10002); // опять вызываем метод
    }
}
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
SHP_class1 FindObj1(int ID) // находит obj1 в векторе из obj1
{
    auto it = std::find_if(VectorOfObj1_.begin(),
        VectorOfObj1_.end(),
        [ID](const SHP_class1& current) { return current->GetID() == ID; }
    );
    if (it != VectorOfObj1_.end()) return *it;
    else return nullptr;
}
//-----------------------------------------------------------------------
SHP_class1 CreateObj1(asio::io_service& io_service)
{
    SHP_class1 NewBar(new class1(io_service)); // создаем obj1
    NewBar->SetID(0); // задаем ему ID здесь поставил константно 0 для краткости вырезки
    VectorOfObj1_.push_back(NewBar); // добавляем в вектор obj1
    return NewBar;
}
//-----------------------------------------------------------------------
Цитата Сообщение от Avazart Посмотреть сообщение
Мм а зачем? есть же std::/boost:: mutex
он неявно вызывается сам
0
7 / 7 / 3
Регистрация: 19.03.2010
Сообщений: 182
19.02.2016, 10:51  [ТС]
Вот еще один скрин на момент останова на строчке port = 10002; (после findObj1)

cllPoints_ - тоже из private class1. И его размер, по-сути - количество созданных Obj из class2
0
7 / 7 / 3
Регистрация: 19.03.2010
Сообщений: 182
19.02.2016, 11:38  [ТС]
Черт, когда написал вырезку нашел где io_servise уничтожается.

Добавлено через 35 минут
Вообще тему можно удалить. К boost она не относится. Только к моей невнимательности
0
19.02.2016, 12:02

Не по теме:

Цитата Сообщение от feck Посмотреть сообщение
он неявно вызывается сам
Чего?

0
19.02.2016, 15:24

Не по теме:

Avazart, Ну очевидно же, что win_mutex это класс, который реализует интерфейс mutex для работы под виндой в boost::asio.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
namespace boost {
namespace asio {
namespace detail {
 
#if !defined(BOOST_ASIO_HAS_THREADS)
typedef null_mutex mutex;
#elif defined(BOOST_ASIO_WINDOWS)
typedef win_mutex mutex;
#elif defined(BOOST_ASIO_HAS_PTHREADS)
typedef posix_mutex mutex;
#elif defined(BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR)
typedef std_mutex mutex;
#endif
 
} // namespace detail
} // namespace asio
} // namespace boost

0
19.02.2016, 15:31

Не по теме:

Цитата Сообщение от feck Посмотреть сообщение
При этом visual studio указывает строчку в подключаемой библиотеке win_mutex.hpp в месте
Мм блин, не заметил..

0
19.02.2016, 18:07

Не по теме:

Цитата Сообщение от feck Посмотреть сообщение
когда написал вырезку нашел где io_servise уничтожается
В этом польза "собеседника", пусть даже виртуального.
Бывает, идешь к коллегам, рассказываешь какую-то свою сложную проблему (или не очень), в итоге они может быть ничего и не поняли, или не успели помочь, а ты уже сам знаешь что не так. А все потому, что обрамление проблемы в речь (или текст) добавляет какую-никакую формализацию, а то, что формализовано, легче поддается анализу.

0
19.02.2016, 22:39  [ТС]

Не по теме:

Цитата Сообщение от DrOffset Посмотреть сообщение
В этом польза "собеседника", пусть даже виртуального.
Бывает, идешь к коллегам, рассказываешь какую-то свою сложную проблему (или не очень), в итоге они может быть ничего и не поняли, или не успели помочь, а ты уже сам знаешь что не так. А все потому, что обрамление проблемы в речь (или текст) добавляет какую-никакую формализацию, а то, что формализовано, легче поддается анализу.
Да, есть такое, но обычно не с кем. А тут осознал на разнице между программой и вырезкой: у меня объект создавался в одной функции, а потом использовался повторно в другой. А io_service, созданный перед созданием объекта, уже уничтожен на момент повторного вызова для объекта.

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

Boost.asio ошибка в socket.connect
Подскажите почему коннект выдает ошибку? #include &lt;QCoreApplication&gt; #include &lt;boost/asio.hpp&gt; int main(int argc, char *argv) { ...

Чат без сервера на Boost.Asio (broadcast и udp)
Здравствуйте! Передо мной стоит задача написать чат, не использующий сервер (для небольшой локальной сети). Для написания используем...

Вылетает ошибка при попытке вызова socket
что делать вылетает ошибка 1&gt;------ Построение начато: проект: КЛИЕНТ, Конфигурация: Debug Win32 ------ 1&gt;Построение начато...

HTTP->Get(): ошибка Socket Error # 10054. Connection reset by peer
Суть проблемы - в заголовке темы, но объясню подробнее. В программе используется обычное получение страницы методом Get в помощью...

udp socket
Вобщем Как узнать что udp порт открыт? tcp обязан ответить на соединение, но udp не принимает соединение, и по моему он не обязан отвечать....


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
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, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru