C++ 执行函数时导致崩溃的变量
我正在构建一个dll代码,但是一些变量正在崩溃 我创建了一个实例来调用另一个文件中的函数 main.hC++ 执行函数时导致崩溃的变量,c++,class,C++,Class,我正在构建一个dll代码,但是一些变量正在崩溃 我创建了一个实例来调用另一个文件中的函数 main.h #include <Windows.h> #include <iomanip> class MyClass { public: using Pointer = std::unique_ptr<MyClass>; bool enable; MyClass(); ~MyClass(); void MyFunc()
#include <Windows.h>
#include <iomanip>
class MyClass {
public:
using Pointer = std::unique_ptr<MyClass>;
bool enable;
MyClass();
~MyClass();
void MyFunc();
};
p类h
#include "main.h"
class MyClass2 {
public:
MyClass2();
MyClass &cl() const;
private:
MyClass::Pointer CClass;
};
pclass.cpp
#include "pch.h"
#include <windows.h>
#include "pclass.h"
MyClass2::MyClass2() : CClass() {}
MyClass& MyClass2::cl() const {
return *CClass;
}
instance.cpp
#include "pch.h"
#include <windows.h>
#include "instance.h"
MyIntance::MyIntance() : inst_check() {}
MyClass2 &MyIntance::ini() {
return inst_check;
}
我不知道它为什么会崩溃
如果我删除enable
变量并只保留MessageBoxA
该函数将正常运行
错误图像
您正在访问一个空指针。从
MyIntance::Instance().ini()
返回的对inst\u check
的引用是一个默认构造的对象,如果我们查看MyClass2
s默认构造函数,您拥有CClass()
,这意味着std::unique\u ptr
是默认构造的,这意味着它等于nullptr
。你需要的是
MyClass2::MyClass2() : CClass(make_unique<MyClass>()) {}
MyClass2::MyClass2():CClass(make_unique()){
因此,有一个实际的
MyClass
对象指向CClass
。您正在访问一个空指针。从MyIntance::Instance().ini()
返回的对inst\u check
的引用是一个默认构造的对象,如果我们查看MyClass2
s默认构造函数,您拥有CClass()
,这意味着std::unique\u ptr
是默认构造的,这意味着它等于nullptr
。你需要的是
MyClass2::MyClass2() : CClass(make_unique<MyClass>()) {}
MyClass2::MyClass2():CClass(make_unique()){
因此,有一个实际的
MyClass
对象指向CClass
。我认为您从未创建过MyClass
的实例。我有:MyClass::Pointer类代码>但从不创建实例。我认为您从未创建过MyClass
的实例。我有:MyClass::Pointer类代码>但从不创建实例。我是C++新手,我一直使用C、php。。我注意到有些事情非常不同,谢谢你告诉我我的错误在哪里was@robertsobrel没问题。如果你还没有,我建议你买一个。C++有很多细微之处,很难学。我是C++新手,我一直用C,PHP,…我注意到有些事情非常不同,谢谢你告诉我我的错误在哪里was@robertsobrel没问题。如果你还没有,我建议你买一个。C++有很多细微之处,它们很难学。
#include "pch.h"
#include "instance.h"
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
MyIntance::Instance().ini().cl().MyFunc();
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
MyClass2::MyClass2() : CClass(make_unique<MyClass>()) {}