主页

小心临时字符串std::string

前言 实际开发时发现有个地方函数执行的比较奇怪,例如: int main() { const char* str1 = std::string("A").c_str(); for(int i = 0 ;i < 100; ++i) { const char* str2 = std::string("B").c_str(); // do something // str1 指向的值会变为 "B" } } 原因 发生这个问题的原因是表达式中的std::string("A")在当前行执行结束时就已经释放了。 变量str1虽然看起来有值,但实际上是指向了已经被释放的内存。 所以当再次...

阅读更多

Azure DevOps 生成管道每次运行都会清理并重新获取所有代码

表现 Azure DevOps在生成管道时,总是清理掉旧的代码并重新获取。 原因 这个问题已知的一种原因是由于Bug引起的。 当获取的源代码中,同时获取了目标目录和目标目录/子目录就会导致这个问题。 解决方法 解决方法十分简单:依据自己要获取的内容,重新梳理代码映射设置,避免嵌套即可。

阅读更多

在 Windows 和 tcmalloc 愉快的玩耍吧

起始 都说使用tcmalloc可以有效的提高 new 和 delete的效率,所以我要尝试一下~~ 了解前因后果,按顺序看。 简单有效直接看 gperftools项目编译tcmalloc。 tcmalloc 的编译 获取tcmalloc代码 首先,我们找到tcmalloc的代码库,然后获取代码~~ https://github.com/google/tcmalloc.git 尝试编译 看文档中的说明并未提到Windows怎么编译,估计会出意外。 按照说明,需要使用Basel编译,这是官网,这是bazel-7.1.2-windows-x86_64的下载连接。 安装后按照说明编译吧~~ 大概率不出意外的会出意外。。。 如果跟我一样出问题了看后面,没出问题应该就能得到li...

阅读更多

TeamFoundation 销毁或永久删除文件

命令 使用tf destroy命令销毁或永久删除 Team Foundation 版本控制 (TFVC) 中的版本控制的文件。 tf destroy [/keephistory] <itemspec1>[;<versionspec>][<itemspec2>...<itemspecN>] [/stopat:<versionspec>] [/preview] [/startcleanup] [/noprompt] [/silent] [/login:username,[password]] [/collection:TeamProjectCollectionUrl] 示例 tf destroy $/Thirdparty/...

阅读更多

ShellExecute和ShellExecute存在内存泄漏

症状 某程序执行一段时间后,内存被大量占用,且任务管理器中查看所有程序使用内存总和与内存实际占用量不符。 问题 经验证,当程序内调用ShellExecute和ShellExecuteEx时,会由系统在程序外部分配内存,并与程序关联,且仅在程序退出时释放。 如果频繁调用,将占用大量外部内存。 由于这些内存是程序外分配的,所以内存泄漏工具无法检测、任务管理器中也无法看到内存占用。 解决方法 减少使用次数。

阅读更多

请勿忽略 warning C4819

原因 waring C4819是一个常见的C++编译警告,是因为文件中的包含了当前代码页无法表示的字符。实际示例如下所示: 2>F:\libigl-2.5.0\include\igl\parallel_for.h(1,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 请勿忽略 该警告在极少数情况下会导致以下甚至更多奇怪的错误: error C2065: “xxx”: 未声明的标识符 error C2923: “xxx”: “xxx” 不是参数 “xxx” 的有效 模板 类型参数 error C2244: “xxx”: 无法将函数定义与现有的声明匹配 error ...

阅读更多

_USRDLL _AFXDLL _WINDLL 三种dll编译宏的具体含义

转载自 _USRDLL _AFXDLL _WINDLL 三种dll编译宏的具体含义 # 常见的编译参数VC建立项目时总会定义Win32。控制台程序会定义_CONSOLE,否则会定义_WINDOWS。 Debug版定义_DEBUG,Release版定义NDEBUG. 与MFC DLL有关的编译常数包括: _WINDLL 表示要做一个用到MFC的DLL _USRDLL 表示做一个用户DLL(相对MFC扩展DLL而言,静态) _AFXDLL 表示使用MFC动态链接库的 regular DLL(动态) _AFXEXT 表示要做一个MFC扩展DLL 所以: Regular, statically linked to MFC _WINDLL,_USRDLL Regular, using ...

阅读更多

QT 和 MFC 兼容问题

起因 在QT环境下,因为MFC环境未进行默认初始化,所以会导致MFC对话框会因为资源切换问题导致无法正确初始化。 问题原因及思路 整个环境中,至少保证一个DLL中使用从CWinApp派生自定义实力的方式实现DLL。 派生类实现 派生方法如下: class __declspec(dllexport) Z_MyApp : public CWinApp { public: Z_UserInterfaceApp(); public: virtual BOOL InitInstance(); DECLARE_MESSAGE_MAP() }; BEGIN_MESSAGE_MAP(Z_MyApp, CWinApp) END_MESSAGE_MAP() ...

阅读更多