【发布时间】:2011-01-01 20:03:50
【问题描述】:
我正在使用 Win7 / VS2008 (9) SDK 6/7.1
我在使用的代码中遇到问题
mini版代码如下
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();
};
这个类没有带有副本和析构函数的默认构造函数 所有变量都被很好地复制并且析构函数不会留下任何内存泄漏,构造函数很简单,就像将参数分配给变量一样。所有变量和代码都被省略以使其简单,因为它们不是问题。
class main
{
std::vector<CONNECTION> con;
int addcon( int defaultvarofcon )
{
CONNECTION temp( defaultvar );
con.push_back( temp );
return con.size() - 1;
}
}
到目前为止一切顺利 当我运行一个只有包含和此代码的控制台测试程序时
main mymainclass;
mymainclass.addcon( 0 );
程序运行良好关闭没有错误
但是当我添加像
main mymainclass;
mymainclass.addcon( 0 );
mymainclass.addcon( 1 );
mymainclass.addcon( 2 );
程序因访问冲突而崩溃 在检查了我的代码两次后,我在所有线程上逐步调试它,我发现只有当我在向量中使用一个元素时,主线程才能读取主线程和工作线程中所有向量类/元素的正确值
但是,如果我使用多个像第二个代码一样的代码,则它们自己线程上所有元素的所有数据都无法访问(错误指针)。但在主线程上,它们仍然正确并显示正确的值
谁能帮我弄清楚这段代码有什么问题?
【问题讨论】:
-
作为任何仅供参考,因为你的类有一个复制构造函数和一个析构函数,它应该几乎肯定有一个赋值运算符。目前尚不清楚这是否与您的问题有关,但这肯定是一个等待发生的错误。
-
不,不是。也许它可能会发生,但现在不是问题:/
标签: c++ multithreading class vector