Я использую Win7 / VS2008 (9) SDK 6 / 7.1
Я столкнулся с проблемой в коде, который я использую
мини-версия кода следующим образом
class CONNECTION
{
int/std::string/bool vars; // just to make it simple
CONNECTION ( int defaultvar );
CONNECTION ( const CONNECTION& copycon )
~CONNECTION ( );
DWORD static WINAPI staticstart( void *param ) //HACK to use createthread on classes
{ return ((CONNECTION *)param)->main); } // yea it works fine
DWORD main();
};
этот класс не имеет конструктора по умолчанию с копией, и деструктор все vars копируется нормально, а деструктор не оставляет никаких утечек, конструктор прост, как назначение параметров для var. Все vars и код опущены, чтобы сделать его простыми потому что они не являются проблемой.
class main
{
std::vector<CONNECTION> con;
int addcon( int defaultvarofcon )
{
CONNECTION temp( defaultvar );
con.push_back( temp );
return con.size() - 1;
}
}
пока все хорошо, когда я запускаю консольную тестовую программу, которая имеет только include, и этот код
main mymainclass;
mymainclass.addcon( 0 );
программа работает нормально, закрывается без ошибок
, но когда я добавляюдополнительный код, такой как
main mymainclass;
mymainclass.addcon( 0 );
mymainclass.addcon( 1 );
mymainclass.addcon( 2 );
, программа падает с нарушением доступа после двойной проверки моего кода. Я отлаживал его шаг за шагом во всех потоках. Я обнаружил, что основной поток может считывать правильные значения всех векторных классов / элементов в обоих основныхпоток и рабочий поток ТОЛЬКО если я использую один элемент в векторе
, однако, если я использую более одного, как второй код, все данные по всем элементам в их собственных потоках недоступны (плохие указатели).но в главном потоке они все еще корректны и показывают правильные значения
Может кто-нибудь, пожалуйста, помогите мне выяснить, что не так с этим кодом?