我有两个项目,一个基本的客户端和一个动态库。 下面是在客户端会发生什么:
int main()
{
Scrutinizer scru;
scru.Scrutinize();
return 0;
}
在DLL,该Scrutinizer
类是这样(__declspec(dllexport)的并且这样为了清楚而省略)
头
class ProcessesGenerator;
class Scrutinizer
{
public:
Scrutinizer();
~Scrutinizer();
ProcessesGenerator *ProcGenerator
void Scrutinize();
};
的向前声明ProcessesGenerator
是“强制性”对我来说,以避免某种循环引用。
在构造函数.cpp文件
这是我如何初始化:
Scrutinizer::Scrutinizer()
{
ProcGenerator = &ProcessesGenerator();
}
更多关于这ProcessesGenerator
类:
头
class ProcessesGenerator
{
public:
ProcessesGenerator();
~ProcessesGenerator();
WinFinder winFinder;
std::vector<std::string> fooCollec;
void GenerateProcesses();
};
ProcessesGenerator.cpp
构造函数:
ProcessesGenerator::ProcessesGenerator()
{
//winFinder = WinFinder();//problem will be the same with or without this line
fooCollec = std::vector<std::string>{"one", "two", "three"};
}
在构造的断点表明矢量与所选择的值进行初始化。
有问题的功能:
void ProcessesGenerator::GenerateProcesses() {
std::string foo = "bar";
fooCollec = std::vector<std::string>{};//read access violation
fooCollec.push_back(foo);//read access violation
winFinder.SomeVector= std::vector<std::string>{};//read access violation
}
到了那里,我可以看到,向量的大小重置为0。任何试图重新初始化,或在读访问冲突.Same其的vecotr成员推动的元素结果WinFinder
成员。 我猜的缺陷是显而易见的,但我真的不明白这一点,
谢谢!