读书人

C++ 类的 一个奇怪的有关问题 肯

发布时间: 2013-08-01 15:23:18 作者: rapoo

C++ 类的 一个奇怪的问题 , 肯定有人遇到过,100分求方法。
具体过程代码描述:


class A
{
public:
char *testPoint;
void AllocMem();
private:

};
class B
{

public:
void init();
A *a;
};


void A::AllocMem()
{
testPoint = new char[100];
}
void init()
{
a= new A;
a->AllocMem();
DWORD ID_;
::CreateThread(0,0,testPontThread,this,0,&ID_);
}

static DWORD WINAPI testPontThread(void *param)
{
B*self = (B*)param;
memset(self->a->testPoint,0x45,100); //这个测试的函数,testPoint 值是有的
//testPoint= CXX0030: 错误: 无法计算表达式的值 //这个是我的工程代码中,出错的位置,
//也就是 逻辑和这个过程是一样的,但是 这里测试的程序可以访问testPoint,但是我工程里的代码
testPoint值为空,也就这个错误 testPoint= CXX0030: 错误: 无法计算表达式的值
return TRUE;
}


文字描述:
B类中,含有一个A类型的指针变量a,通过a初始化其成员指针,B中开启一个线程,讲B对象传递到该线程中
在线程中引用self->a->testPoint 时,发现testPoint的值为空,开始 a->AllocMem();已经分配空间,也就是testPoint已有值,如上的测试代码可以访问,但是我工程里不能访问。

我工程的代码和上述测试的代码 唯一差别就是 A类 比较大,变量和函数很多? 是不是和类的内存对齐有关系呢 ? C++ 多线程 C 类
[解决办法]
觉得和内存对齐没关系。看看 self 的值和 this 是不是一样,如果是的话,再看看 self->a 和 init 里面的 a 是不是一样的。
[解决办法]
你提供的这个测试代码是对的,你又说你的工程不对。
.....
没工程代码,怎么通过正确的测试代码来找工程中的错误?

----------------------------------
我工程的代码和上述测试的代码 唯一差别就是 A类 比较大,变量和函数很多? 是不是和类的内存对齐有关系呢 ?
--------------------
那就把你工程中的很多变量和函数先注释掉,留下最基本的框架,一点点的去调试。成功了就恢复其中一部分,再调试。

读书人网 >C++

热点推荐