c++ - 从链接到另一个 dll 的 dll 使用我的 exe 时,访问冲突执行位置 0x0000
问题描述
这是我的程序。
https://github.com/ILLmew/Seagull-Engine-v2
简而言之,这是我为学习新事物而编写的一个小型游戏引擎,问题是:
我有一个 SCore.dll 用于基本设施,所有其他模块都使用它来做其他事情。现在我有一个链接到 SCore.dll 的 SRendererVulkan.dll 和我的应用程序 Sandbox.exe,它在加载时而不是运行时链接 SCore.dll 和 SRendererVulkan.dll。
像下面这样:
SCore.dll -------> SRendererVulkan.dll -------> Sandbox.exe
| ^
| |
-------------------------------------------------
在VS2019中编译时,没有编译错误或链接错误。当我运行程序时,我放了一些断点来检查 vulkan 的资源是否已初始化,并且似乎整个初始化成功,一切都很好。没有 nullptr 检查失败,它显示了窗口。但是当我关闭窗口并进入关机阶段时,它会做出断言:
访问冲突执行位置 0x0000000000000000
我使用 premake 作为构建工具,上面的 dll 所有链接都指向eastl.lib 和 mimalloc.lib。
我尝试了很多方法,包括导出 SRendererVulkan.dll 的后端或在 VulkanRenderDevice 中导出整个类,但都失败了。
我知道这是一个链接错误,但我无法解决它,所以我来到这里寻求帮助。
解决方案
我在exe中新建()SRendererVulkan.dll并在SCore.dll中将其删除。所以创建成功,但销毁失败。由于此操作,它会引发删除相应内存分配块的失败,从而导致此错误。
推荐阅读
- c# - Gridview 分页复选框未正确分配
- git - 合并或重新调整分支上的拉取请求?
- java - 如何在arraylist中删除字符串的字符
? - c++ - 返回时复制操作是在 lock_guard 析构函数之前还是之后执行的?
- sql - 从 BigQuery 导出自定义维度
- sql - 在 Amazon Redshift 中使用 max() 或 min() 条件查询优化选择
- c# - Selenium xpath 断言
- javascript - 为什么我在 ES6 中的 Javascript 导入不起作用?意外的标记 *
- java - 在 Spring Boot 中上传时读取 CSV 文件
- command-line-interface - Julia `--project` 命令行选项中的`@.` 是什么?