C++细节
daijunhua
向往技术巅峰。
展开
-
Dll中开辟内存在外的释放问题
昨天遇到一个很奇怪的问题,引用一个DLL,里面有内存开辟的操作,后来在外面释放的时候总出问题,查了查资料,后来找到了解决方案!其中引起这个问题的原因主要是跨module的内存开辟和释放可能不在同一个runtime libary,后来把DLL和EXE都设置为MTD后就好了,在这里再用别人的一篇文章(很有用),这篇文章主要说明在dll中开辟内存要和项目在同一个运行时库上面,那样就不会导致内存原创 2008-05-05 14:56:00 · 709 阅读 · 0 评论 -
warning: no message line prompt for ID **
今天做GUI的工具的时候发现了MFC底层的一个小问题,在使用菜单或者工具条或者其他的特殊控件(今天我使用的是DockBar)的时候会出现这个警告,而且这个警告不是在编译时出现,而是在debug的时候出来的,当在使用某一控件的时候在你的debug输出信息中可以看到这个,查查资料后发现很难消除,本身MFC代码就不是很健全,同时VC的编译器的相关细节还在微软的保密中,再加上VC的这个调试器的细节原创 2008-05-05 15:04:00 · 5235 阅读 · 3 评论 -
VC给菜单(任何ID)指定快捷键
网上很多人都在问同样的问题,所以大家都知道也都不知道,曾经自己也是这样的。今天又看到很多关于菜单的问题,同样也有菜单快捷键的问题,很多人使用了直接截获消息进行分析处理的方式,对于MFC这样基于消息的东西还是可以做到的,但是我在这里不想介绍这样费劲的方法,在MFC中(或者win32程序)有个HACCEL,这个就是加速键的来源,所以在windows程序中可以用如下方案: m_hAccel原创 2008-05-05 15:08:00 · 1334 阅读 · 1 评论 -
宏定义的妙用
刚下班的时候在写一个小DEMO,主要是能让程序能在ANSI和UNICODE都能正常编译运行的,对于程序的所有的字串我有这样的定义: #ifdef _UNICODEtypedef std::wstring String;#elsetypedef std::string String;#endif这样在程序中能随便使用String这个东西,后来在写一个函数的时候发现了一个问题,对于默认原创 2008-05-05 15:01:00 · 693 阅读 · 0 评论 -
如何监测程序的内存问题
原创 2008-05-07 16:08:00 · 474 阅读 · 0 评论 -
dll中使用new和delete
在 DLL 中用 new 来创建宿主程序中的对象,然后把这个对象指针保存到宿主程序,当 DLL 被卸载后,凡是涉及到这个指针的调用都会报错,包括 delete 这个指针也会有错。分析原因,因为new/delete使用的是局部堆(当然这与编译器可能也有关,但至少M$的编译器应该是这样的),也就是说不同的DLL虽然共享一个地址空间,但完全可能会维护不同的局部堆(堆分段),这与编译器的实现有关。有原创 2008-07-28 23:04:00 · 3120 阅读 · 1 评论 -
windbg工具
对于程序bug的查找很有用,特别喜欢。。。。安装这个软件之后用命令行设置为系统的dump默认工具,具体命令为:windbg -I WinDbg配置和使用基础2007-11-01 18:36 WinDbg配置和使用基础 2007年07月0转载 2008-05-16 16:55:00 · 1533 阅读 · 0 评论 -
windbg调试命令
WinDbg是微软开发的免费源码级调试工具。Windbg可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件。由于大部分程序员不需要做Kernel模式调试, 我在这篇文章中不会介绍Kernel模式调试。Kernel模式调试对学习Windows核心极有帮助。如果你对此感兴趣,可以阅读Inside Windows 2000和Windbg所带的帮助文件。 这篇文章得主要目的是介绍W转载 2008-08-06 19:59:00 · 3116 阅读 · 0 评论 -
BoundsChecker的用法
BoundsChecker 是一个Run-Time错误检测工具,它主要定位程序在运行时期发生的各种错误。BoundsChecker能检测的错误包括:1))1、指针操作和内存、资源泄露错误,比如:内存泄露;资源泄露;对指针变量的错误操作。22、内存操作方面的错误,比如: 内存读、写溢出; 使用未初始化的内存。33、API函数使用错误BoundsChecker安转载 2008-05-28 09:59:00 · 1332 阅读 · 0 评论