Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > С/С++
Перезагрузить страницу EnterCriticalSection критичная секция
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Elecstorm Elecstorm вне форума
Member
 
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 14.05.2007
Question EnterCriticalSection критичная секция - 31.10.2010, 20:32

На EnterCriticalSection вылетает ошибка access violation.
Что могу сказать: сама критическая секция объявлена в ашнике, который подключен ко всем файлам с описаниями классов, использующих эту критическую функцию. Инициализацю с помощью функции InitializeCriticalSectionAndSpinCount делаю в конструкторе одного из классов. После этого функция EnterCriticalSection работает только в этом классе, во всех остальных - access violation. Почему так может быть?
Ответить с цитированием
  (#2 (permalink)) Старый
Elecstorm Elecstorm вне форума
Member
 
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 14.05.2007
По умолчанию 31.10.2010, 21:27

Заменил критическую секцию на класс по работе с мютексами. С классом получилось тоже самое. В общем ашнике - указатель на него. В одном из классов программы сделал new. Когда по глобальному указателю обращаюсь из других объектов к методам того класса - выскакиевает access violation.
Ответить с цитированием
  (#3 (permalink)) Старый
Влад Влад вне форума
Специалист
 
Сообщений: 3,884
Сказал(а) спасибо: 1
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 27.06.2002
Адрес: Санкт-Петербург
По умолчанию 01.11.2010, 10:24

Приведи проблемный код. Телепаты все в отпуске :-)


The difference between theory and practice is that in theory, there is no difference between theory and practice, but in practice, there is.
Ответить с цитированием
  (#4 (permalink)) Старый
Angel5a Angel5a вне форума
Member
 
Сообщений: 1,213
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 28.02.2005
По умолчанию 01.11.2010, 21:12

Ув. Elecstorm, в хедере располагать надо только описание на внешнюю переменную. Сам объект должен быть определён в ОДНОМ из сишников.
same.h [CPP]extern CRITICALSECTION mycs;[/CPP]
definecs.cpp [CPP]#include "same.h"
CRITICALSECTION mycs;
Constructor() {
InitCriticalSection(&mycs);
}[/CPP]
other.cpp [CPP]#include "same.h"
function() {
EnterCriticalSection(&mycs);
}[/CPP]Без ключевого слова extern у вас в каждом файле будет просто своя "копия" переменной, с которой этот файл и будет работать. Естественно что правильно работает только файл где такая "копия" была проинициализирована. А в остальных файлах остались неинициализированные "копии".
"копия" взято в кавычки, т.к. на самом деле никакими копиями они не являются, а являются объектами одного типа, и с одинаковым локальным именем, но ни дублируют друг друга, ни являются одним и тем же объектом.

P.S.: немного потеепатил на предмет распространенных ошибок, и собираюсь тоже в отпуск
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
требуемая секция в INF-файле не найдена nrlynx Любые вопросы от новичков 25 31.07.2011 22:37
Секция для ресурсов c++ Общие вопросы программирования 4 13.11.2006 09:55
Секция ресурсов в PE формате psu Visual C++ 1 04.01.2006 13:33



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов