执行函数时导致崩溃的变量
variable causing crash when executing function
我正在构建一个dll代码,但一些变量正在破坏
我创建了一个实例来调用另一个文件中的函数
main.h
#include <Windows.h>
#include <iomanip>
class MyClass {
public:
using Pointer = std::unique_ptr<MyClass>;
bool enable;
MyClass();
~MyClass();
void MyFunc();
};
main.cpp
#include "pch.h"
#include "main.h"
MyClass::MyClass()
{
enable = true;
}
MyClass::~MyClass()
{
}
void MyClass::MyFunc()
{
if (enable) { //crash occurs here
enable = false;
MessageBoxA(NULL, "enable is true", "Test", 0);
}
}
pclass.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;
}
实例.h
#include "pclass.h"
class MyIntance {
public:
static MyIntance& Instance() {
static MyIntance inst;
return inst;
}
MyIntance(MyIntance const&) = delete;
void operator=(MyIntance const&) = delete;
MyClass2 &ini();
private:
MyIntance();
private:
MyClass2 inst_check;
};
instance.cpp
#include "pch.h"
#include <windows.h>
#include "instance.h"
MyIntance::MyIntance() : inst_check() {}
MyClass2 &MyIntance::ini() {
return inst_check;
}
dllmain.cpp
#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;
}
我不知道它为什么会崩溃。
如果我删除enable
变量,只保留MessageBoxA
,函数将正常运行
错误图像
https://i.stack.imgur.com/rQjES.png
您正在访问一个空指针。从MyIntance::Instance().ini()
返回的对inst_check
的引用是一个默认构造的对象,如果我们查看MyClass2
的默认构造函数,则您有CClass()
,这意味着std::unique_ptr<MyClass>
是默认构造的,这意味着您等于nullptr
。你需要的是
MyClass2::MyClass2() : CClass(make_unique<MyClass>()) {}
从而存在CCD_ 10所指向的实际CCD_
相关文章:
- 执行函数时导致崩溃的变量
- 为什么在同一条件变量上使用多个互斥锁会使此代码崩溃?
- 变量参数崩溃的 C 函数
- 访问使用 def 文件导出的静态变量时崩溃
- Android - JNI 在集原生C++变量上崩溃
- 程序运行而不会崩溃,但无论该人将什么作为变量,答案都是 0
- MFC对话框成员变量的随机崩溃不在范围中
- Qt4 C++:来自多个线程的QString变量使用崩溃
- 试图在C++中打印变量int会导致它崩溃.为什么?
- OpenCV-将变量添加到类成员崩溃程序
- 打印标头中声明的变量时C++崩溃
- 为什么会崩溃?对函数中静态变量的c++引用无效
- 添加公共变量时崩溃
- 为什么这段代码不会使 cin 崩溃?char 输入了一个整数变量 C++
- 程序中的所有指针变量在突然崩溃后都被删除了吗
- 尝试打印变量.程序崩溃
- Qt5自定义LineEdit小部件(QLineEdit子类)私有变量使应用程序崩溃
- const强制转换为全局变量,程序崩溃(c++)
- 为什么在堆栈上使用变量时initstate_r会崩溃
- Visual studio 2005在watch变量时崩溃