﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-随心动</title><link>http://www.cppblog.com/czy463/</link><description /><language>zh-cn</language><lastBuildDate>Tue, 07 Apr 2026 15:30:00 GMT</lastBuildDate><pubDate>Tue, 07 Apr 2026 15:30:00 GMT</pubDate><ttl>60</ttl><item><title>CODE::BLOCK-输出中文-备忘</title><link>http://www.cppblog.com/czy463/archive/2014/03/13/206147.html</link><dc:creator>陈志远</dc:creator><author>陈志远</author><pubDate>Wed, 12 Mar 2014 19:06:00 GMT</pubDate><guid>http://www.cppblog.com/czy463/archive/2014/03/13/206147.html</guid><wfw:comment>http://www.cppblog.com/czy463/comments/206147.html</wfw:comment><comments>http://www.cppblog.com/czy463/archive/2014/03/13/206147.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/czy463/comments/commentRss/206147.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/czy463/services/trackbacks/206147.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/czy463/archive/2014/03/13/206147.html'>阅读全文</a><img src ="http://www.cppblog.com/czy463/aggbug/206147.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/czy463/" target="_blank">陈志远</a> 2014-03-13 03:06 <a href="http://www.cppblog.com/czy463/archive/2014/03/13/206147.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++单件模式及内存释放[转载]</title><link>http://www.cppblog.com/czy463/archive/2013/12/17/204844.html</link><dc:creator>陈志远</dc:creator><author>陈志远</author><pubDate>Mon, 16 Dec 2013 20:18:00 GMT</pubDate><guid>http://www.cppblog.com/czy463/archive/2013/12/17/204844.html</guid><wfw:comment>http://www.cppblog.com/czy463/comments/204844.html</wfw:comment><comments>http://www.cppblog.com/czy463/archive/2013/12/17/204844.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/czy463/comments/commentRss/204844.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/czy463/services/trackbacks/204844.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">转载网址:<a href="http://blog.csdn.net/windboyzsj/article/details/2790485">http://blog.csdn.net/windboyzsj/article/details/2790485</a></span><span style="color: #008080; "><br /></span><span style="color: #008080; ">&nbsp;1</span>&nbsp;#include&nbsp;&lt;iostream.h&gt;&nbsp;<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;Singleton&nbsp;<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;{&nbsp;<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #0000FF; ">public</span>:&nbsp;<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;~Singleton(){cout&lt;&lt;"singleton&nbsp;deconstruct"&lt;&lt;endl;}&nbsp;<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;Singleton*&nbsp;Instance()&nbsp;<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;{&nbsp;<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(_instance&nbsp;==&nbsp;NULL)&nbsp;<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;{&nbsp;<br /><span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;_instance&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Singleton();&nbsp;<br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;Cleaner&nbsp;cl;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">延迟到这里&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;}&nbsp;<br /><span style="color: #008080; ">13</span>&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;_instance;&nbsp;<br /><span style="color: #008080; ">14</span>&nbsp;}&nbsp;<br /><span style="color: #008080; ">15</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Print(<span style="color: #0000FF; ">char</span>*&nbsp;str)&nbsp;<br /><span style="color: #008080; ">16</span>&nbsp;{&nbsp;<br /><span style="color: #008080; ">17</span>&nbsp;&nbsp;&nbsp;cout&lt;&lt;"singleton&nbsp;print:"&lt;&lt;str&lt;&lt;endl;&nbsp;<br /><span style="color: #008080; ">18</span>&nbsp;}&nbsp;<br /><span style="color: #008080; ">19</span>&nbsp;<span style="color: #0000FF; ">private</span>:&nbsp;<br /><span style="color: #008080; ">20</span>&nbsp;Singleton(){cout&lt;&lt;"singleton&nbsp;construct"&lt;&lt;endl;}&nbsp;<br /><span style="color: #008080; ">21</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;Singleton*&nbsp;_instance;&nbsp;<br /><span style="color: #008080; ">22</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;Cleaner&nbsp;<br /><span style="color: #008080; ">23</span>&nbsp;{&nbsp;<br /><span style="color: #008080; ">24</span>&nbsp;<span style="color: #0000FF; ">public</span>:&nbsp;<br /><span style="color: #008080; ">25</span>&nbsp;&nbsp;&nbsp;Cleaner(){cout&lt;&lt;"cleaner&nbsp;construct"&lt;&lt;endl;}&nbsp;<br /><span style="color: #008080; ">26</span>&nbsp;&nbsp;&nbsp;~Cleaner()&nbsp;<br /><span style="color: #008080; ">27</span>&nbsp;&nbsp;&nbsp;{&nbsp;<br /><span style="color: #008080; ">28</span>&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;"cleaner&nbsp;deconstruct"&lt;&lt;endl;&nbsp;<br /><span style="color: #008080; ">29</span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(Singleton::Instance())&nbsp;<br /><span style="color: #008080; ">30</span>&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;Singleton::Instance();&nbsp;<br /><span style="color: #008080; ">31</span>&nbsp;&nbsp;&nbsp;}&nbsp;<br /><span style="color: #008080; ">32</span>&nbsp;};&nbsp;<br /><span style="color: #008080; ">33</span>&nbsp;};&nbsp;<br /><span style="color: #008080; ">34</span>&nbsp;Singleton*&nbsp;Singleton::_instance&nbsp;=&nbsp;NULL;&nbsp;<br /><span style="color: #008080; ">35</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main(<span style="color: #0000FF; ">int</span>&nbsp;argc,&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;argv[])&nbsp;<br /><span style="color: #008080; ">36</span>&nbsp;{&nbsp;<br /><span style="color: #008080; ">37</span>&nbsp;Singleton::Instance()-&gt;Print("print&nbsp;1");&nbsp;<br /><span style="color: #008080; ">38</span>&nbsp;Singleton::Instance()-&gt;Print("print&nbsp;2");&nbsp;<br /><span style="color: #008080; ">39</span>&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;&nbsp;<br /><span style="color: #008080; ">40</span>&nbsp;}</div><img src ="http://www.cppblog.com/czy463/aggbug/204844.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/czy463/" target="_blank">陈志远</a> 2013-12-17 04:18 <a href="http://www.cppblog.com/czy463/archive/2013/12/17/204844.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQLITE3 使用总结[转载]</title><link>http://www.cppblog.com/czy463/archive/2013/12/16/204816.html</link><dc:creator>陈志远</dc:creator><author>陈志远</author><pubDate>Sun, 15 Dec 2013 16:01:00 GMT</pubDate><guid>http://www.cppblog.com/czy463/archive/2013/12/16/204816.html</guid><wfw:comment>http://www.cppblog.com/czy463/comments/204816.html</wfw:comment><comments>http://www.cppblog.com/czy463/archive/2013/12/16/204816.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/czy463/comments/commentRss/204816.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/czy463/services/trackbacks/204816.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 网上看到的，非常有用，转载一下， 非常感谢作者。&nbsp;&nbsp;<a href='http://www.cppblog.com/czy463/archive/2013/12/16/204816.html'>阅读全文</a><img src ="http://www.cppblog.com/czy463/aggbug/204816.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/czy463/" target="_blank">陈志远</a> 2013-12-16 00:01 <a href="http://www.cppblog.com/czy463/archive/2013/12/16/204816.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自处理list</title><link>http://www.cppblog.com/czy463/archive/2013/12/15/204812.html</link><dc:creator>陈志远</dc:creator><author>陈志远</author><pubDate>Sun, 15 Dec 2013 14:30:00 GMT</pubDate><guid>http://www.cppblog.com/czy463/archive/2013/12/15/204812.html</guid><wfw:comment>http://www.cppblog.com/czy463/comments/204812.html</wfw:comment><comments>http://www.cppblog.com/czy463/archive/2013/12/15/204812.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/czy463/comments/commentRss/204812.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/czy463/services/trackbacks/204812.html</trackback:ping><description><![CDATA[<div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><span style="color: #008080; ">一个自处理的list 用途多多<br />&nbsp; 1</span>&nbsp;&nbsp;&nbsp;1&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">子项</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;&nbsp;2</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;2&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;autoItem<br /><span style="color: #008080; ">&nbsp;&nbsp;3</span>&nbsp;&nbsp;&nbsp;3&nbsp;{<br /><span style="color: #008080; ">&nbsp;&nbsp;4</span>&nbsp;&nbsp;&nbsp;4&nbsp;<span style="color: #0000FF; ">public</span>:<br /><span style="color: #008080; ">&nbsp;&nbsp;5</span>&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">处理</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;&nbsp;6</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">virtual</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;&nbsp;proces()&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">&nbsp;&nbsp;7</span>&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">弹出</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;&nbsp;8</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">virtual</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;&nbsp;ok()&nbsp;=&nbsp;0;&nbsp;<br /><span style="color: #008080; ">&nbsp;&nbsp;9</span>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">处理顺序</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;10</span>&nbsp;<span style="color: #008000; "></span>&nbsp;10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">virtual</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;&nbsp;&nbsp;Order(){<span style="color: #0000FF; ">return</span>&nbsp;0;}<br /><span style="color: #008080; ">&nbsp;11</span>&nbsp;&nbsp;11&nbsp;};<br /><span style="color: #008080; ">&nbsp;12</span>&nbsp;&nbsp;12&nbsp;<span style="color: #0000FF; ">enum</span>&nbsp;sortType<br /><span style="color: #008080; ">&nbsp;13</span>&nbsp;&nbsp;13&nbsp;{<br /><span style="color: #008080; ">&nbsp;14</span>&nbsp;&nbsp;14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ST_Input,<br /><span style="color: #008080; ">&nbsp;15</span>&nbsp;&nbsp;15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ST_Custom<br /><span style="color: #008080; ">&nbsp;16</span>&nbsp;&nbsp;16&nbsp;};<br /><span style="color: #008080; ">&nbsp;17</span>&nbsp;&nbsp;17&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">自处理list</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;18</span>&nbsp;<span style="color: #008000; "></span>&nbsp;18&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;_autolist<br /><span style="color: #008080; ">&nbsp;19</span>&nbsp;&nbsp;19&nbsp;{<br /><span style="color: #008080; ">&nbsp;20</span>&nbsp;&nbsp;20&nbsp;<span style="color: #0000FF; ">public</span>:<br /><span style="color: #008080; ">&nbsp;21</span>&nbsp;&nbsp;21&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_autolist(&nbsp;sortType&nbsp;_type&nbsp;);<br /><span style="color: #008080; ">&nbsp;22</span>&nbsp;&nbsp;22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~_autolist();<br /><span style="color: #008080; ">&nbsp;23</span>&nbsp;&nbsp;23&nbsp;<br /><span style="color: #008080; ">&nbsp;24</span>&nbsp;&nbsp;24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">继承函数</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;25</span>&nbsp;<span style="color: #008000; "></span>&nbsp;25&nbsp;<span style="color: #0000FF; ">public</span>:<br /><span style="color: #008080; ">&nbsp;26</span>&nbsp;&nbsp;26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">加入处理序列</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;27</span>&nbsp;<span style="color: #008000; "></span>&nbsp;27&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">virtual</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;&nbsp;push(autoItem&nbsp;*p);<br /><span style="color: #008080; ">&nbsp;28</span>&nbsp;&nbsp;28&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">执行处理序列</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;29</span>&nbsp;<span style="color: #008000; "></span>&nbsp;29&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">virtual</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;&nbsp;go();<br /><span style="color: #008080; ">&nbsp;30</span>&nbsp;&nbsp;30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">清理所有</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;31</span>&nbsp;<span style="color: #008000; "></span>&nbsp;31&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">virtual</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;&nbsp;clear();&nbsp;<br /><span style="color: #008080; ">&nbsp;32</span>&nbsp;&nbsp;32&nbsp;<br /><span style="color: #008080; ">&nbsp;33</span>&nbsp;&nbsp;33&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//<br /></span><span style="color: #008080; ">&nbsp;34</span>&nbsp;<span style="color: #008000; "></span>&nbsp;34&nbsp;<span style="color: #0000FF; ">protected</span>:<br /><span style="color: #008080; ">&nbsp;35</span>&nbsp;&nbsp;35&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::list&lt;autoItem*&gt;&nbsp;itemList;<br /><span style="color: #008080; ">&nbsp;36</span>&nbsp;&nbsp;36&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sortType&nbsp;_sortType;<br /><span style="color: #008080; ">&nbsp;37</span>&nbsp;&nbsp;37&nbsp;};<br /><span style="color: #008080; ">&nbsp;38</span>&nbsp;&nbsp;38&nbsp;<br /><span style="color: #008080; ">&nbsp;39</span>&nbsp;&nbsp;39&nbsp;<br /><span style="color: #008080; ">&nbsp;40</span>&nbsp;&nbsp;40&nbsp;_autolist::_autolist(&nbsp;sortType&nbsp;_type&nbsp;)<br /><span style="color: #008080; ">&nbsp;41</span>&nbsp;&nbsp;41&nbsp;{<br /><span style="color: #008080; ">&nbsp;42</span>&nbsp;&nbsp;42&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_sortType&nbsp;=&nbsp;_type;<br /><span style="color: #008080; ">&nbsp;43</span>&nbsp;&nbsp;43&nbsp;}<br /><span style="color: #008080; ">&nbsp;44</span>&nbsp;&nbsp;44&nbsp;<br /><span style="color: #008080; ">&nbsp;45</span>&nbsp;&nbsp;45&nbsp;_autolist::~_autolist()<br /><span style="color: #008080; ">&nbsp;46</span>&nbsp;&nbsp;46&nbsp;{<br /><span style="color: #008080; ">&nbsp;47</span>&nbsp;&nbsp;47&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clear();<br /><span style="color: #008080; ">&nbsp;48</span>&nbsp;&nbsp;48&nbsp;}<br /><span style="color: #008080; ">&nbsp;49</span>&nbsp;&nbsp;49&nbsp;<br /><span style="color: #008080; ">&nbsp;50</span>&nbsp;&nbsp;50&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;_autolist::push(&nbsp;autoItem&nbsp;*p&nbsp;)<br /><span style="color: #008080; ">&nbsp;51</span>&nbsp;&nbsp;51&nbsp;{<br /><span style="color: #008080; ">&nbsp;52</span>&nbsp;&nbsp;53&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(p&nbsp;==&nbsp;NULL)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br /><span style="color: #008080; ">&nbsp;53</span>&nbsp;&nbsp;54&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">switch</span>&nbsp;(_sortType)<br /><span style="color: #008080; ">&nbsp;54</span>&nbsp;&nbsp;55&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">&nbsp;55</span>&nbsp;&nbsp;56&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;ST_Input:<br /><span style="color: #008080; ">&nbsp;56</span>&nbsp;&nbsp;57&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">&nbsp;57</span>&nbsp;&nbsp;58&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;itemList.insert(itemList.end(),p);<br /><span style="color: #008080; ">&nbsp;58</span>&nbsp;&nbsp;59&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">&nbsp;59</span>&nbsp;&nbsp;60&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;60</span>&nbsp;&nbsp;61&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;ST_Custom:<br /><span style="color: #008080; ">&nbsp;61</span>&nbsp;&nbsp;62&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">&nbsp;62</span>&nbsp;&nbsp;63&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(itemList.size()&nbsp;==&nbsp;0)<br /><span style="color: #008080; ">&nbsp;63</span>&nbsp;&nbsp;64&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">&nbsp;64</span>&nbsp;&nbsp;65&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;itemList.push_back(p);<br /><span style="color: #008080; ">&nbsp;65</span>&nbsp;&nbsp;66&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">&nbsp;66</span>&nbsp;&nbsp;67&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;67</span>&nbsp;&nbsp;68&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;std::list&lt;autoItem*&gt;::iterator&nbsp;it;<br /><span style="color: #008080; ">&nbsp;68</span>&nbsp;&nbsp;69&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;it=&nbsp;itemList.begin();<br /><span style="color: #008080; ">&nbsp;69</span>&nbsp;&nbsp;70&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(;&nbsp;it&nbsp;!=&nbsp;itemList.end();it++)<br /><span style="color: #008080; ">&nbsp;70</span>&nbsp;&nbsp;71&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">&nbsp;71</span>&nbsp;&nbsp;72&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;((*it)-&gt;Order()&nbsp;&lt;&nbsp;p-&gt;Order())<span style="color: #0000FF; ">continue</span>;<br /><span style="color: #008080; ">&nbsp;72</span>&nbsp;&nbsp;73&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;itemList.insert(it,p);<br /><span style="color: #008080; ">&nbsp;73</span>&nbsp;&nbsp;74&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">&nbsp;74</span>&nbsp;&nbsp;75&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;75</span>&nbsp;&nbsp;76&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">&nbsp;76</span>&nbsp;&nbsp;77&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;77</span>&nbsp;&nbsp;78&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">default</span>:<br /><span style="color: #008080; ">&nbsp;78</span>&nbsp;&nbsp;80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br /><span style="color: #008080; ">&nbsp;79</span>&nbsp;&nbsp;82&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;80</span>&nbsp;&nbsp;83&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br /><span style="color: #008080; ">&nbsp;81</span>&nbsp;&nbsp;84&nbsp;}<br /><span style="color: #008080; ">&nbsp;82</span>&nbsp;&nbsp;85&nbsp;<br /><span style="color: #008080; ">&nbsp;83</span>&nbsp;&nbsp;86&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;_autolist::go()<br /><span style="color: #008080; ">&nbsp;84</span>&nbsp;&nbsp;87&nbsp;{<br /><span style="color: #008080; ">&nbsp;85</span>&nbsp;&nbsp;88&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;std::list&lt;autoItem*&gt;::iterator&nbsp;it;<br /><span style="color: #008080; ">&nbsp;86</span>&nbsp;&nbsp;89&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;nsize&nbsp;=&nbsp;itemList.size();<br /><span style="color: #008080; ">&nbsp;87</span>&nbsp;&nbsp;90&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;it=&nbsp;itemList.begin();<br /><span style="color: #008080; ">&nbsp;88</span>&nbsp;&nbsp;91&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(;&nbsp;it&nbsp;!=&nbsp;itemList.end();)<br /><span style="color: #008080; ">&nbsp;89</span>&nbsp;&nbsp;92&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">&nbsp;90</span>&nbsp;&nbsp;93&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(*it)-&gt;proces();<br /><span style="color: #008080; ">&nbsp;91</span>&nbsp;&nbsp;94&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(&nbsp;(*it)-&gt;ok())<br /><span style="color: #008080; ">&nbsp;92</span>&nbsp;&nbsp;95&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;it&nbsp;=&nbsp;itemList.erase(it);<br /><span style="color: #008080; ">&nbsp;93</span>&nbsp;&nbsp;96&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br /><span style="color: #008080; ">&nbsp;94</span>&nbsp;&nbsp;97&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;it++;<br /><span style="color: #008080; ">&nbsp;95</span>&nbsp;&nbsp;98&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;96</span>&nbsp;&nbsp;99&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">&nbsp;97</span>&nbsp;100&nbsp;}<br /><span style="color: #008080; ">&nbsp;98</span>&nbsp;101&nbsp;<br /><span style="color: #008080; ">&nbsp;99</span>&nbsp;102&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;_autolist::clear()<br /><span style="color: #008080; ">100</span>&nbsp;103&nbsp;{<br /><span style="color: #008080; ">101</span>&nbsp;104&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;itemList.clear();<br /><span style="color: #008080; ">102</span>&nbsp;105&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">103</span>&nbsp;106&nbsp;}<br /><span style="color: #008080; ">104</span>&nbsp;107&nbsp;<br /><span style="color: #008080; ">105</span>&nbsp;</div></div></div><img src ="http://www.cppblog.com/czy463/aggbug/204812.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/czy463/" target="_blank">陈志远</a> 2013-12-15 22:30 <a href="http://www.cppblog.com/czy463/archive/2013/12/15/204812.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>gl和dx</title><link>http://www.cppblog.com/czy463/archive/2013/04/16/199475.html</link><dc:creator>陈志远</dc:creator><author>陈志远</author><pubDate>Tue, 16 Apr 2013 03:34:00 GMT</pubDate><guid>http://www.cppblog.com/czy463/archive/2013/04/16/199475.html</guid><wfw:comment>http://www.cppblog.com/czy463/comments/199475.html</wfw:comment><comments>http://www.cppblog.com/czy463/archive/2013/04/16/199475.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/czy463/comments/commentRss/199475.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/czy463/services/trackbacks/199475.html</trackback:ping><description><![CDATA[<div>点:<br />&nbsp;&nbsp;&nbsp;v1(x,y,z)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt;v1(x,y,-z)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Z轴方向不同&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DX:&nbsp; z正方向屏幕向里&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OpengGL:&nbsp; z正方向屏幕向外<br />面:<br />&nbsp;&nbsp; face1(v1,v2,v3) -&gt; face(v1,v3,v2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 正面相反&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DX:&nbsp; 面正方向是顺时针&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpengGL:&nbsp; 面正方向逆时针<br />纹理坐标<br />&nbsp;&nbsp; tz(u,v)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; tz(u,1.0f-z)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (0,0)点不同&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DX:&nbsp;&nbsp;(0,0)左上角&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpengGL:&nbsp; (0,0)左下角<br />矩阵:<br />&nbsp;&nbsp; m(m00,...m33)&nbsp;&nbsp; -&gt;转置()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DX: 左手坐标系,行向量&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OpenGL:&nbsp; 右手坐标系,列向量&nbsp; </div><img src ="http://www.cppblog.com/czy463/aggbug/199475.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/czy463/" target="_blank">陈志远</a> 2013-04-16 11:34 <a href="http://www.cppblog.com/czy463/archive/2013/04/16/199475.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sqlite读取,存储二进制数据（转载）</title><link>http://www.cppblog.com/czy463/archive/2013/03/24/198771.html</link><dc:creator>陈志远</dc:creator><author>陈志远</author><pubDate>Sun, 24 Mar 2013 08:06:00 GMT</pubDate><guid>http://www.cppblog.com/czy463/archive/2013/03/24/198771.html</guid><wfw:comment>http://www.cppblog.com/czy463/comments/198771.html</wfw:comment><comments>http://www.cppblog.com/czy463/archive/2013/03/24/198771.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/czy463/comments/commentRss/198771.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/czy463/services/trackbacks/198771.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: SQLite存取二进制数据(http://hi.baidu.com/ejoywx/blog/item/4d7b418c8677cc00b31bbae9.html)http://blog.sina.com.cn/s/blog_60f8483a0100ydaw.htmlCode highlighting produced by Actipro CodeHighlighter (freeware)h...&nbsp;&nbsp;<a href='http://www.cppblog.com/czy463/archive/2013/03/24/198771.html'>阅读全文</a><img src ="http://www.cppblog.com/czy463/aggbug/198771.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/czy463/" target="_blank">陈志远</a> 2013-03-24 16:06 <a href="http://www.cppblog.com/czy463/archive/2013/03/24/198771.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>（转）（转）如何调试MFC的内存泄露</title><link>http://www.cppblog.com/czy463/archive/2012/07/27/185360.html</link><dc:creator>陈志远</dc:creator><author>陈志远</author><pubDate>Fri, 27 Jul 2012 11:20:00 GMT</pubDate><guid>http://www.cppblog.com/czy463/archive/2012/07/27/185360.html</guid><wfw:comment>http://www.cppblog.com/czy463/comments/185360.html</wfw:comment><comments>http://www.cppblog.com/czy463/archive/2012/07/27/185360.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/czy463/comments/commentRss/185360.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/czy463/services/trackbacks/185360.html</trackback:ping><description><![CDATA[<div class="articalTitle"><!-- 正文开始 -->
</div>
<div class="articalContent  " id="sina_keyword_ad_area2">
<p>VC++ IDE 的默认状态(VC6)是没有启用内存泄漏检测机制的，也就是说即使某段代码有内存泄漏，调试会话的 Output 窗口的 Debug 页不会输出有关内存泄漏信息。你必须设定以启用内存泄漏检测机制。</p>
<p><br />&nbsp;<wbr><br />按下面的方法使用调试堆函数<br />在XXXView.cpp中添加下面粗体行</p>
<p>你再看看输出结果，是不是有很多的内存泄漏？</p>
<p>#define _CRTDBG_MAP_ALLOC<br />#include&lt;stdlib.h&gt;<br />#include&lt;crtdbg.h&gt;</p>
<p><br />CXXXView::~CXXXView()<br />{<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> _CrtDumpMemoryLeaks();<br />}</p>
<p>文章出处：DIY部落(<a href="http://www.diybl.com/course/3_program/c++/cppjs/2007925/73624.html">http://www.diybl.com/course/3_program/c++/cppjs/2007925/73624.html</a>)</p>
<p><font color="#808080">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></font> <font color="#000000">首先，应该是MFC报告我们发现内存泄漏。注意：要多运行几次，以确定输出的内容不变，特别是{}之间的数值，不能变，否则下面的方法就不好用了。<br /><img title="（转）如何调试MFC的内存泄露" height="194" alt="image001.jpg" src="http://www.cnitblog.com/images/cnitblog_com/martin/image001.jpg" width="880" border="0" real_src="http://www.cnitblog.com/images/cnitblog_com/martin/image001.jpg" /><br /><br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>我们来看看：</font></p>
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><span style="color: rgb(0,0,0)"><font color="#000000">F:\CodeSample\Test\TestPipe\LeakTest\MainFrm.cpp(</font></span> <span style="color: rgb(0,0,0)"><font color="#000000">54</font></span> <span style="color: rgb(0,0,0)"><font color="#000000">)&nbsp;<wbr>:&nbsp;<wbr>{</font></span> <span style="color: rgb(0,0,0)"><font color="#000000">86</font></span> <span style="color: rgb(0,0,0)"><font color="#000000">}&nbsp;<wbr>normal&nbsp;<wbr>block&nbsp;<wbr>at&nbsp;<wbr></font></span> <span style="color: rgb(0,0,0)"><font color="#000000">0x00422E80</font></span> <span style="color: rgb(0,0,0)"><font color="#000000">,&nbsp;<wbr></font></span> <span style="color: rgb(0,0,0)"><font color="#000000">10</font></span> <span style="color: rgb(0,0,0)"><font color="#000000">&nbsp;<wbr>bytes&nbsp;<wbr></font></span> <span style="color: rgb(0,0,255)"><font color="#000000">long</font></span> <span style="color: rgb(0,0,0)"><font color="#000000">.<br />&nbsp;<wbr>Data:&nbsp;<wbr></font></span> <span style="color: rgb(0,0,0)"><font color="#000000">&lt;</font></span> <span style="color: rgb(0,0,0)"><font color="#000000">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></font></span> <span style="color: rgb(0,0,0)"><font color="#000000">&gt;</font></span> <span style="color: rgb(0,0,0)"><font color="#000000">&nbsp;<wbr>1F&nbsp;<wbr>1F&nbsp;<wbr>1F&nbsp;<wbr>1F&nbsp;<wbr>1F&nbsp;<wbr>CD&nbsp;<wbr>CD&nbsp;<wbr>CD&nbsp;<wbr>CD&nbsp;<wbr>CD&nbsp;<wbr><br /></font></span></div>
<p><font color="#000000"><br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><span style="color: rgb(0,0,0)">F:\CodeSample\Test\TestPipe\LeakTest\MainFrm.cpp(</span><span style="color: rgb(0,0,0)">54</span><span style="color: rgb(0,0,0)">) 告诉我们MFC认为是在该文件的54行，发生了内存泄漏。你双击改行就可以转到该文件的54行了。但是有时候这一信息并不能用来准确判断，比如：MFC可能报告Strcore.cpp文件的某行，实际上这是CString的实现函数，此时并不知道什么时候发生了内存泄漏。<br /><br /></span>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>此时我们需要更多的信息。那么我们看看紧接其后的：<br /><span style="color: rgb(0,0,0)"><br /></span></font></p>
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><span style="color: rgb(0,0,0)"><font color="#000000">{</font></span> <span style="color: rgb(0,0,0)"><font color="#000000">86</font></span> <span style="color: rgb(0,0,0)"><font color="#000000">}&nbsp;<wbr>normal&nbsp;<wbr>block&nbsp;<wbr>at&nbsp;<wbr></font></span> <span style="color: rgb(0,0,0)"><font color="#000000">0x00422E80</font></span> <span style="color: rgb(0,0,0)"><font color="#000000">,&nbsp;<wbr></font></span> <span style="color: rgb(0,0,0)"><font color="#000000">10</font></span> <span style="color: rgb(0,0,0)"><font color="#000000">&nbsp;<wbr>bytes&nbsp;<wbr></font></span> <span style="color: rgb(0,0,255)"><font color="#000000">long</font></span> <span style="color: rgb(0,0,0)"><font color="#000000">.<br />&nbsp;<wbr>Data:&nbsp;<wbr></font></span> <span style="color: rgb(0,0,0)"><font color="#000000">&lt;</font></span> <span style="color: rgb(0,0,0)"><font color="#000000">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></font></span> <span style="color: rgb(0,0,0)"><font color="#000000">&gt;</font></span> <span style="color: rgb(0,0,0)"><font color="#000000">&nbsp;<wbr>1F&nbsp;<wbr>1F&nbsp;<wbr>1F&nbsp;<wbr>1F&nbsp;<wbr>1F&nbsp;<wbr>CD&nbsp;<wbr>CD&nbsp;<wbr>CD&nbsp;<wbr>CD&nbsp;<wbr>CD&nbsp;<wbr><br /></font></span></div>
<p><font color="#000000"><br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>它告诉我们：在第86次分配的内存没有释放，一共有10字节，内容移16进制方式打印给我们看。<br /><br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>有了这些信息，我们可以开始调试内存泄漏了。<br /><br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>按下F10在程序的刚开始处，停下来，打开Watch窗口：<br /><br /><img title="（转）如何调试MFC的内存泄露" height="334" alt="image002.jpg" src="http://www.cnitblog.com/images/cnitblog_com/martin/image002.jpg" width="665" border="0" real_src="http://www.cnitblog.com/images/cnitblog_com/martin/image002.jpg" /><br /><br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>在Watch窗口中输入：<br /><br /></font></p>
<div style="border-right: rgb(204,204,204) 1px solid; padding-right: 5px; border-top: rgb(204,204,204) 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: rgb(204,204,204) 1px solid; width: 98%; padding-top: 4px; border-bottom: rgb(204,204,204) 1px solid; background-color: rgb(238,238,238)"><span style="color: rgb(0,0,0)"><font color="#000000">{,,msvcrtd.dll}_crtBreakAlloc</font></span></div>
<p><font color="#000000"><br />&nbsp;<wbr> <img title="（转）如何调试MFC的内存泄露" height="174" alt="image003.jpg" src="http://www.cnitblog.com/images/cnitblog_com/martin/image003.jpg" width="450" border="0" real_src="http://www.cnitblog.com/images/cnitblog_com/martin/image003.jpg" /><br /><br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>然后更改值为上文提到的分配次数：86<br /><br /><img title="（转）如何调试MFC的内存泄露" height="174" alt="image004.jpg" src="http://www.cnitblog.com/images/cnitblog_com/martin/image004.jpg" width="356" border="0" real_src="http://www.cnitblog.com/images/cnitblog_com/martin/image004.jpg" /><br /><br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>接着按下F5继续，然后在第86次分配的时候会发生中断：<br /><br /><img title="（转）如何调试MFC的内存泄露" height="125" alt="image005.jpg" src="http://www.cnitblog.com/images/cnitblog_com/martin/image005.jpg" width="311" border="0" real_src="http://www.cnitblog.com/images/cnitblog_com/martin/image005.jpg" /><br /><br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>然后我们打开堆栈窗口：<br /><br /><img title="（转）如何调试MFC的内存泄露" height="315" alt="image006.jpg" src="http://www.cnitblog.com/images/cnitblog_com/martin/image006.jpg" width="326" border="0" real_src="http://www.cnitblog.com/images/cnitblog_com/martin/image006.jpg" /><img title="（转）如何调试MFC的内存泄露" height="174" alt="image007.jpg" src="http://www.cnitblog.com/images/cnitblog_com/martin/image007.jpg" width="356" border="0" real_src="http://www.cnitblog.com/images/cnitblog_com/martin/image007.jpg" /><br /><br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>往回查看最近我们自己的代码，双击堆栈我们自己的函数那一层，上图有绿色三角的那一层。就定位到泄漏时分配的内存了。<br /><br /><img title="（转）如何调试MFC的内存泄露" height="418" alt="image008.jpg" src="http://www.cnitblog.com/images/cnitblog_com/martin/image008.jpg" width="729" border="0" real_src="http://www.cnitblog.com/images/cnitblog_com/martin/image008.jpg" /><br /></font></p>
<p><font color="#000000">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>之后，就是看你的编码功底了。</font></p>
<p><br /></p>
<p><br /></p>
<p><br />&nbsp;<wbr></p>
<h2><a href="http://www.cnitblog.com/martin/archive/2006/Raistlin/archive/2005/12/14/5380.html" name="viewpost1_TitleUrl">你也许还没用过的vc++的调试的功能</a></h2>
<p><font color="#000000">From: http://www.cnitblog.com/Raistlin/archive/2005/12/14/5380.html</font></p>
<p>刚刚在IT博客网闲逛的时候看到了<a href="http://www.cnitblog.com/martin/archive/2006/wangk/">孤独的夜</a>的一片文章《<a href="http://www.cnitblog.com/martin/archive/2006/wangk/archive/2005/12/14/5369.html">如何调试MFC中的内存泄漏</a>》，讲道用设置{,,msvcrtd.dll}_crtBreakAlloc<font style="background-color: rgb(255,255,255)"><strong>这个变量</strong></font>来调试内存泄露的问题。<br /><br />在<a href="http://support.microsoft.com/kb/q151585/">How to use _crtBreakAlloc to debug a memory allocation</a>你可以找到英文的更完整的版本，静态链接和动态连接到C运行库的名称是不一样的<br />静态:_crtBreakAlloc<br />动态:{,,msvcr40d.dll}*__p__crtBreakAlloc()&nbsp;<wbr> (vc++4.0 和4.1版本，估计没人在用吧)<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>{,,msvcrtd.dll}*__p__crtBreakAlloc()&nbsp;<wbr> (Visual C++ 4.2 or later)<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>{,,msvcrtd.dll}_crtBreakAlloc (好像这样也是可以的)<br /><br /><br />{,,msvcrtd.dll}__p__crtBreakAlloc()是个什么东西呢？<br /><br />查看msdn索引&#8220;Advanced Breakpoint&#8221;and you will find out...<br /><br />语法如下：<br />{[function],[source],[exe] } location<br />{[function],[source],[exe] } variable_name<br />{[function],[source],[exe] } expression_r_r<br />这个是我转的时候的地址：<a href="http://blog.sina.com.cn/s/blog_630d564a0100gq5k.html">http://blog.sina.com.cn/s/blog_630d564a0100gq5k.html</a></p></div><img src ="http://www.cppblog.com/czy463/aggbug/185360.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/czy463/" target="_blank">陈志远</a> 2012-07-27 19:20 <a href="http://www.cppblog.com/czy463/archive/2012/07/27/185360.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转)ASSERT与VERIFY宏的区别 </title><link>http://www.cppblog.com/czy463/archive/2012/07/17/183967.html</link><dc:creator>陈志远</dc:creator><author>陈志远</author><pubDate>Tue, 17 Jul 2012 15:38:00 GMT</pubDate><guid>http://www.cppblog.com/czy463/archive/2012/07/17/183967.html</guid><wfw:comment>http://www.cppblog.com/czy463/comments/183967.html</wfw:comment><comments>http://www.cppblog.com/czy463/archive/2012/07/17/183967.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/czy463/comments/commentRss/183967.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/czy463/services/trackbacks/183967.html</trackback:ping><description><![CDATA[<div class="article_title" sizset="19" sizcache="1">原文地址：<a href="http://blog.csdn.net/liuchanghe/article/details/1425080">http://blog.csdn.net/liuchanghe/article/details/1425080</a><a href="http://blog.vckbase.com/smileonce/articles/1184.html"><br /><br />http://blog.vckbase.com/smileonce/articles/1184.html</a>（这个链接-&gt;<u><font color="#800080"><a href="http://blog.vckbase.com/smileonce/articles/1184.html"><u><font color="#800080">关于Debug和Release之本质区别</font></u></a> </font></u>）</div>
<div class="article_content" id="article_content" sizset="24" sizcache="1">
<div id="content_text" sizset="24" sizcache="1">
<p>今天公司有同事问我ASSERT与VERIFY宏有什么区别，虽然平时常用这两个宏对一些变量在Debug模式下作判断，但一时还真答不上来二者之间的具体差别，看来只是知其然不知其所以然。后来查了一些资料，总算弄清楚了二者之间的区别，整理后与同事交流了一番，感觉收获还是蛮大的。下面对我的理解进行了总结：</p>
<div>&nbsp;&nbsp;&nbsp; 1 ASSERT与VERIFY宏在Debug模式下作用基本一致，二者都对表达式的值进行计算，如果值为非0，则什么事也不做；如果值为0，则输出诊断信息。</div>
<div>&nbsp;&nbsp;&nbsp; 2 ASSERT与VERIFY宏在Release模式下效果完全不一样。ASSERT不计算表达式的值，也不会输出诊断信息；VERIFY计算表达式的值，但不管值为0还是非0都不会输出诊断信息。</div>
<div>VERIFY &nbsp; 与ASSERT用在程序调试上并无本质上的区别。 &nbsp; <br />&nbsp; In &nbsp; the &nbsp; debug &nbsp; version &nbsp; of &nbsp; MFC, &nbsp; the &nbsp; VERIFY &nbsp; macro &nbsp; evaluates &nbsp; its &nbsp; argument. &nbsp; If &nbsp; the &nbsp; result &nbsp; is &nbsp; 0, &nbsp; &nbsp; <br />&nbsp; the &nbsp; macro &nbsp; prints &nbsp; a &nbsp; diagnostic &nbsp; message &nbsp; and &nbsp; halts &nbsp; the &nbsp; program. &nbsp; If &nbsp; the &nbsp; condition &nbsp; is &nbsp; nonzero, &nbsp; &nbsp; <br />&nbsp; it &nbsp; does &nbsp; nothing. &nbsp; <br />&nbsp; &nbsp; <br />&nbsp; In &nbsp; the &nbsp; release &nbsp; version &nbsp; of &nbsp; MFC, &nbsp; VERIFY &nbsp; evaluates &nbsp; the &nbsp; expression &nbsp; but &nbsp; does &nbsp; not &nbsp; print &nbsp; or &nbsp; interrupt &nbsp; the &nbsp; program. &nbsp; For &nbsp; example, &nbsp; if &nbsp; the &nbsp; expression &nbsp; is &nbsp; a &nbsp; function &nbsp; call, &nbsp; the &nbsp; call &nbsp; will &nbsp; be &nbsp; made.&nbsp;&nbsp; </div>
<div>
<table class="dataTable" cellspacing="0" cellpadding="0">
<thead>
<tr class="stdHeader" valign="top">
<td>断言类型</td>
<td style="border-right: #cccccc 1px solid">&nbsp;定义</td></tr></thead>
<tbody>
<tr class="record" valign="top">
<td>ANSI C 断言</td>
<td style="border-right: #cccccc 1px solid">void assert(int expression );</td></tr>
<tr class="evenRecord" valign="top">
<td>C Runtime Lib 断言</td>
<td style="border-right: #cccccc 1px solid">_ASSERT( booleanExpression );<br />_ASSERTE( booleanExpression );</td></tr>
<tr class="record" valign="top">
<td>MFC 断言</td>
<td style="border-right: #cccccc 1px solid">ASSERT( booleanExpression );<br />VERIFY( booleanExpression );<br />ASSERT_VALID( pObject ); <br />ASSERT_KINDOF( classname, pobject );</td></tr>
<tr class="evenRecord" valign="top">
<td>ATL 断言</td>
<td style="border-right: #cccccc 1px solid">ATLASSERT( booleanExpression );</td></tr></tbody></table>
<div class="dataTableBottomMargin"></div>&nbsp;此外，TRACE() 宏的编译也受 _DEBUG 控制。<br />&nbsp;所有这些断言都只在 Debug版中才被编译，而在 Release 版中被忽略。唯一的例外是 VERIFY() 。事实上，这些宏都是调用了 assert() 函数，只不过附加了一些与库有关的调试代码。如果你在这些宏中加入了任何程序代码，而不只是布尔表达式（例如赋值、能改变变量值的函数调用 等），那么 Release 版都不会执行这些操作，从而造成错误。初学者很容易犯这类错误，查找的方法也很简单，因为这些宏都已在上面列出，只要利用 VC++ 的 Find in Files 功能在工程所有文件中找到用这些宏的地方再一一检查即可。另外，有些高手可能还会加入 #ifdef _DEBUG 之类的条件编译，也要注意一下。<br />&nbsp;顺便值得一提的是<strong> VERIFY() 宏，这个宏允许你将程序代码放在布尔表达式里。这个宏通常用来检查 Windows API 的返回值。有些人可能为这个原因而滥用 VERIFY() ，事实上这是危险的，因为 VERIFY() 违反了断言的思想，不能使程序代码和调试代码完全分离，最终可能会带来很多麻烦。因此，专家们建议尽量少用这个宏</strong>。</div></div></div><img src ="http://www.cppblog.com/czy463/aggbug/183967.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/czy463/" target="_blank">陈志远</a> 2012-07-17 23:38 <a href="http://www.cppblog.com/czy463/archive/2012/07/17/183967.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>