??xml version="1.0" encoding="utf-8" standalone="yes"?>久久久久人妻精品一区二区三区,伊人久久国产免费观看视频,久久亚洲国产午夜精品理论片 http://www.shnenglu.com/shanoa/其实我更爱姐?..zh-cnTue, 06 May 2025 20:40:29 GMTTue, 06 May 2025 20:40:29 GMT60boost::asio|络传输错误码的一些实验结果(recv error_codeQ?/title><link>http://www.shnenglu.com/shanoa/archive/2011/05/06/145840.html</link><dc:creator>酿妹?/dc:creator><author>酿妹?/author><pubDate>Fri, 06 May 2011 10:06:00 GMT</pubDate><guid>http://www.shnenglu.com/shanoa/archive/2011/05/06/145840.html</guid><wfw:comment>http://www.shnenglu.com/shanoa/comments/145840.html</wfw:comment><comments>http://www.shnenglu.com/shanoa/archive/2011/05/06/145840.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.shnenglu.com/shanoa/comments/commentRss/145840.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/shanoa/services/trackbacks/145840.html</trackback:ping><description><![CDATA[错误码很重要Q可以由此判断网l连接到底发生了(jin)马事情Q从而驱动高层逻辑的行为。只有笼l的错误码判断的|络层是不够规范的,鄙h觉得有些错误码还是需要在|络层就区分开的,Ҏ(gu)记录一些当前实验的错误码以?qing)发生原因?br /><br />以下是一部分在async_receive()的handler处捕获到的比较有用的错误?br /> <table style="width: 756px; border-collapse: collapse; height: 222px" border="1" cellpadding="3" cellspacing="0"> <tbody> <tr> <td style="width: 132px">错误码(十进Ӟ(j)</td> <td style="width: 231px; height: 24px">枚D</td> <td>发现原因</td> </tr> <tr> <td>10009</td> <td>boost::asio::error::bad_descriptor</td> <td>在一个已l关闭了(jin)的套接字上执行async_receive()</td> </tr> <tr> <td>995</td> <td>boost::asio::error::operation_aborted</td> <td>正在async_receive()异步d{待Ӟ本端关闭套接?/td> </tr> <tr> <td>10054</td> <td>boost::asio::error::connection_reset</td> <td>正在async_receive()异步d{待Ӟq端的TCP协议层发送RESETl止链接Q暴力关闭套接字。常常发生于q端q程强制关闭Ӟ操作pȝ释放套接字资源?/td> </tr> <tr> <td>2</td> <td>boost::asio::error::eof</td> <td>正在async_receive()异步d{待Ӟq端关闭套接字,q里?0054发生的情况似乎一P但是实际上应该是有区别的Q具体神马区别,由回复中jack的说法,q个是远端正常关闭套接字?/td> </tr> </tbody> </table> 只是一些浅陋的试Q目前觉得有用的也就是这几个Q不正确的地方请送我鸡蛋?img src ="http://www.shnenglu.com/shanoa/aggbug/145840.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/shanoa/" target="_blank">酿妹?/a> 2011-05-06 18:06 <a href="http://www.shnenglu.com/shanoa/archive/2011/05/06/145840.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>boost的bjam~译指o(h)http://www.shnenglu.com/shanoa/archive/2011/01/30/139605.html酿妹?/dc:creator>酿妹?/author>Sun, 30 Jan 2011 01:34:00 GMThttp://www.shnenglu.com/shanoa/archive/2011/01/30/139605.htmlhttp://www.shnenglu.com/shanoa/comments/139605.htmlhttp://www.shnenglu.com/shanoa/archive/2011/01/30/139605.html#Feedback0http://www.shnenglu.com/shanoa/comments/commentRss/139605.htmlhttp://www.shnenglu.com/shanoa/services/trackbacks/139605.html前面必须使用到的Q类g面的指o(h)
F:\sdk\boost>bjam --link=static --threading=multi --runtime-link=shared debug release stage

后面需要选择~译器和要编译的?br>--toolset=msvc-9.0 --with-date_time --with-thread......


]]>
OGRE与MFC的文件系l冲H问?/title><link>http://www.shnenglu.com/shanoa/archive/2010/12/29/137693.html</link><dc:creator>酿妹?/dc:creator><author>酿妹?/author><pubDate>Wed, 29 Dec 2010 12:49:00 GMT</pubDate><guid>http://www.shnenglu.com/shanoa/archive/2010/12/29/137693.html</guid><wfw:comment>http://www.shnenglu.com/shanoa/comments/137693.html</wfw:comment><comments>http://www.shnenglu.com/shanoa/archive/2010/12/29/137693.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.shnenglu.com/shanoa/comments/commentRss/137693.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/shanoa/services/trackbacks/137693.html</trackback:ping><description><![CDATA[<p>q两个东西在一起问题真呀么多......前些日子才写的一个注意事的随笔Q这回又有问题需要记录,好吧Q开新文写?br>问题Q由于项目的复杂度,问题的表C原因其实相差十万八千里?br>原因QMFC在打开和保持文件后Q即打开CFileDialog对话框后Q,׃(x)修改q程的当前目录,是SetCurrentDirectoy()Q导致OGRE里那些用相对路径做Location的资源目录下的文件全部无法读取(其实我觉得OGRE应该把这些相对目录在d文g的时候换成绝对目录)(j)。具体就是openResource()中调用stat()出错Q文件系l中找不到指定文件?br>解决Ҏ(gu)Q在合适的地方调用SetCurrentDirectoy()把进E当前目录设|回q程工作目录?.....</p> <p>于是又是一下午+半个晚上的调试时?.....<br></p> <img src ="http://www.shnenglu.com/shanoa/aggbug/137693.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/shanoa/" target="_blank">酿妹?/a> 2010-12-29 20:49 <a href="http://www.shnenglu.com/shanoa/archive/2010/12/29/137693.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>备忘随笔pd2Q内存错?/title><link>http://www.shnenglu.com/shanoa/archive/2010/12/23/137336.html</link><dc:creator>酿妹?/dc:creator><author>酿妹?/author><pubDate>Thu, 23 Dec 2010 15:41:00 GMT</pubDate><guid>http://www.shnenglu.com/shanoa/archive/2010/12/23/137336.html</guid><wfw:comment>http://www.shnenglu.com/shanoa/comments/137336.html</wfw:comment><comments>http://www.shnenglu.com/shanoa/archive/2010/12/23/137336.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.shnenglu.com/shanoa/comments/commentRss/137336.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/shanoa/services/trackbacks/137336.html</trackback:ping><description><![CDATA[接上?strong>《备忘随W系?QMFC与OGRE联姻注意事项?/strong>之后Q再记录一下内存错误,l过无数ơ莫名其妙的内存问题之后Q发C些找不着北的内存Crash问题出现的原因都很荒谬,所以本主要例举一下近期出现的一些怪异内存问题和让人啼W皆非的原因所在?br><br><strong>问题1Q?/strong>~译器在~译那些讉K成员变量的代码时错?jin)相对于this指针的偏Ud节数Q赋值给下面一个变量时Q却修改?jin)上面一个变量的倹{?br>原因Q与我共事的某位大仙׃L(fng)使用l构体传递网l包Q所以在某头文g里用#pragma pack(1)包括住了(jin)整个头文Ӟ一不小心把#include "其他头文?那些行也l包括了(jin)q去Q其中不乏Windows.h  stl云云......<br>解决办法Q当焉个啥......?pragma pack(1)的位|往下去几行Q还是细心点?..费?jin)整整一天调试?br><br><strong>问题2Q?/strong>从网l另一端机器发q来一个结构体Q分别接收一个结构体中的多个数据成员和一ơ性接收整个结构体取出的数据不同?br>原因Q这是个?的情形,两个相同的结构体分别在不同的头文件中Q且一个有#pragma pack(1)Q一个没有?br>解决办法Q如果要用结构体传递网l包Q还是共用头文g?.....<br><br>其实......很多内存问题很不好描qͼ我也不经常出现如上那L(fng)l的问题Q所以下面我q是说一个最常见的内存问题(0x.....地址讉K冲突Q和原因吧:(x)<br>“0x.....地址讉K冲突”q个Crash基本上每个h都遇刎ͼ而且l常遇到Q但是大部分都很Ҏ(gu)解决。判断问题的原因可以看这几点Q?br>原因1Q如?x....q个值很,一般就?大一些,而且是在讉K某对象中的数据成员时出错的,那么q基本都是因对象指针为空Q你用了(jin)I对象指针调用了(jin)代码?br>原因2Q如?x...值同样很,但是q在访问某对象中的数据成员时出错,而是调用某函数那一行时出错的,那么q个函数十有八九(ji)是个虚函敎ͼ如果我说中的话,那原因应该如前面的原?相同Q只是这回是d虚函数表时就崩了(jin)?br>原因3Q如?x...值类似是0xcdcdcdcd?xeeeccc或者与q相q的敎ͼ且同h在访问数据成员或调用虚函数的时候出的问题,那么q就是个野指针问题?jin),释放了(jin)就别再用啊?br>原因4Q内存越界,q个对程序造成的麻?ch)比Mȝ(ch)都要大,但是问题q不隐蔽Q记得ؓ(f)每个cȝ数据成员q行必要的初始化?br>原因5Q用了(jin)memset或ZeroMemory清空一些对象或对象数组。特别是对象数组Q很Ҏ(gu)让h忽略q个问题。有些程序员?x)觉得某对象里都是可以这hI的数据成员Q所以便q样做了(jin)Q但是往往虚函数表指针?x)被忽略Q这个指针绝对不能一赯清空的?br>ȝQ不要让表达索引的整形在初始化后是个未知|不要让指针没有在初始化时被赋0|不要不检查指针的值就拿它讉K成员函数和成员数据;不要重复释放指针所指对象;不要使用释放后和未初始化的内存数据;可以的话使用指针Q释放指针所指地址后,为指针赋0|只有在完全是内部cd构成且没有多态的cd对象上用memset为对象赋倹{?br> <img src ="http://www.shnenglu.com/shanoa/aggbug/137336.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/shanoa/" target="_blank">酿妹?/a> 2010-12-23 23:41 <a href="http://www.shnenglu.com/shanoa/archive/2010/12/23/137336.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>备忘随笔pd1QMFC与OGRE联姻注意事项http://www.shnenglu.com/shanoa/archive/2010/12/23/137249.html酿妹?/dc:creator>酿妹?/author>Wed, 22 Dec 2010 17:39:00 GMThttp://www.shnenglu.com/shanoa/archive/2010/12/23/137249.htmlhttp://www.shnenglu.com/shanoa/comments/137249.htmlhttp://www.shnenglu.com/shanoa/archive/2010/12/23/137249.html#Feedback6http://www.shnenglu.com/shanoa/comments/commentRss/137249.htmlhttp://www.shnenglu.com/shanoa/services/trackbacks/137249.html
本文记录最q发现的一?MFC ?OGRE1.7.2版本 联姻的注意事:(x)

问题1Q?/strong>创徏Ogre的CViewH口后,无法截获鼠标点击和移动信息,只能获取鼠标滚轮信息?br>原因?qing)解x案:(x)传递CViewH口句柄Ӟ请一定用externedWindowHandle的属性keyQ切C要用parentWindowHandleQ因为parentWindowHandle是让CView成ؓ(f)渲染H口的父H口Q鼠标键盘消息都不会(x)路由到CView上,而是在渲染窗口里被截P而externedWindowHandle是让CViewH口本n成ؓ(f)渲染H口Q所以CView才能正常截获到输入消息?br>
问题2Q?/strong>当解决问?之后Q发C用externedWindowHandlel制出的H口很小Q而用parentWindowHandle时则正常
原因?qing)解x案:(x)注意l承CView::OnSize()函数响应WM_SIZE消息Q但请切讎ͼ(x)千万别在OnSize中调用Ogre::RenderWindow::resize()函数Q这?x)导致OnSize()函数的递归回调Q因为Ogre::RenderWindow::resize()函数中会(x)调用AdjustWindow()和SetWindowPos()函数Q这?x)导致发送WM_SIZE消息q羃?yu)窗口,从而导致问题的发生?br>
问题3Q?/strong>如何解决H口重置大小的问?br>解决Ҏ(gu)Q在OnSize()?span style="COLOR: red">不能调用Ogre::RenderWindow::resize()函数Q?strong style="COLOR: red">应该调用Ogre::RenderWindow::windowMovedOrResized()函数Q通知RenderWindow在渲染前重新讄Viewport的宽高比例?br>
问题4Q?/strong>怎样保L染@?br>分析Q上|看?jin)一些相关的解决Ҏ(gu)Q发现大多用WM_TIMER消息来维持OGRE的主渲染循环Q这应该是下下策的方案了(jin)?.....当然q有其他的实现方案,譬如开另一个线E,q个Ҏ(gu)q是可行的,但是L些不对味Q因为渲染明明应该在ȝE中才是最x案。于是我q?jin)一下MFC闲下来的时候都q了(jin)些什么,最后发C(jin)以下解决Ҏ(gu)Q应该算是很不错但ƈ不难的解军_法了(jin)Qؓ(f)什么没见网上有人提供这L(fng)Ҏ(gu)让我很不理解Q窝着藏着也得不到半点好处Q?br>解决Ҏ(gu)Q用空闲回调。该回调是需要承CWinApp::OnIdle()函数Q好像是叫这个,反正肯定带Idleq个单词Q,当主U程中的消息循环没有取到消息Ӟ调用PeekMessage()没有获取到消息)(j)Q就?x)去调用q个函数Q于?.....在q个函数里调用绘制一帧吧QOgre::RenderWindow::update()Q另外有动画的话q需要调用Ogre::Root::_fireFrameRenderingQueued()Q因为动L新在q里。如果是惌所有渲染对象都更新一帧的话,直接调用Ogre::Root::renderOneFrame()吧?br>
解决Ҏ(gu)不一定最好,也不一定适合你的情况Q但愿能微薄之力,也是作ؓ(f)我个人的备忘吧?

]]>
关于MVC PropertySet OperatorStack的一些设计思?/title><link>http://www.shnenglu.com/shanoa/archive/2010/11/20/134166.html</link><dc:creator>酿妹?/dc:creator><author>酿妹?/author><pubDate>Sat, 20 Nov 2010 11:30:00 GMT</pubDate><guid>http://www.shnenglu.com/shanoa/archive/2010/11/20/134166.html</guid><wfw:comment>http://www.shnenglu.com/shanoa/comments/134166.html</wfw:comment><comments>http://www.shnenglu.com/shanoa/archive/2010/11/20/134166.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.shnenglu.com/shanoa/comments/commentRss/134166.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/shanoa/services/trackbacks/134166.html</trackback:ping><description><![CDATA[最q在l公叔R码一个场景编辑器Q大致得实现的功能有Q?br>地Ş高度?br>地ŞU理?br>攄物件和房屋<br>攄_子pȝ<br>讄路径点和只能摄像机点<br><br>是个简单的不能再简单的场景~辑器了(jin)?..但是q样的一个工兯是很头痛的,特别是用C++来写...<br>头痛的原因不是别的,正是q个表现层和后台数据同步问题。这个在C++的UI库中目前q真没有什么现成的好办法,于是开始造轮子,为MFC写了(jin)PropertySet和OperatorStack?br>首先q个UI数据和内存数据双向同步的问题直接让我崩溃?..׃以前写过一些工P知道q东西如果不做个设计开始冲着功能写的话会(x)有什么后果。嗯Q于是承封装了(jin)CMFCPropertyGridCtrl控gQؓ(f)每个叶子属性项装?jin)一个LeafItemQ根据属性名来更新PropertySet里对应的数据......具体实现几千字略- - 最l成型时代码q样Q?br>DynamicObject obj;<br>propertyGrid.attachObject(obj);<br>q里的DynamicObjectl承PropertySetQ于是propertyGrid控g׃(x)昄obj里所有的属性数据了(jin)...然后是双向更新问题,目前是给Property里加?jin)一个eventValueChanged事g响应Q让PropertyGridCtrl监听q些数据的变化,而propertyGridCtrlq个UI上的数据变化同样是派生实现CMFCPropertyGridCtrl的值变化响应函数来l绑定的LeafItem更新数据Q也是直接就h到Property里了(jin)?br>q有OperatorStack.....q个是操作栈Q记录用h作的Q用于撤销和重做的操作Q也用到?jin)PropertySet来记录变化对象的属性快照,嗯,叫SnapShootRecord的类里面记录的都是一个对象的变化属性?br>先就记录q么多,很ؕ很不Ҏ(gu)懂,主要l我自己做个记录的,没啥贡献Q实际上q有很多不好用的地方Q所以最q在想一些改q设计,{我惛_?jin)放上来详细设计和源码?......<img src ="http://www.shnenglu.com/shanoa/aggbug/134166.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/shanoa/" target="_blank">酿妹?/a> 2010-11-20 19:30 <a href="http://www.shnenglu.com/shanoa/archive/2010/11/20/134166.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>l于完成?jin)自q模板设计Q初步实C(jin)filter_streambufQcge目启动......http://www.shnenglu.com/shanoa/archive/2010/10/12/129640.html酿妹?/dc:creator>酿妹?/author>Tue, 12 Oct 2010 11:37:00 GMThttp://www.shnenglu.com/shanoa/archive/2010/10/12/129640.htmlhttp://www.shnenglu.com/shanoa/comments/129640.htmlhttp://www.shnenglu.com/shanoa/archive/2010/10/12/129640.html#Feedback4http://www.shnenglu.com/shanoa/comments/commentRss/129640.htmlhttp://www.shnenglu.com/shanoa/services/trackbacks/129640.html实现的目的是Z(jin)在一些特定情况下不去使用boost的filter_streambufQ不使用boost::iostreams的理由如下:(x)
1、基于运行时配置的过滤器Q效率稍?br>2、对于网l通讯而言Qboost的filter_streambuf乃至整个iostreams库都昑־较ؓ(f)臃肿?br>所以,我自q写了(jin)一套filter_streambufQ承了(jin)std::streambufQƈ配合自己重新设计的archive和batch_dataq行|络通讯Q无论是效率q是易用性上都超Z用boost的iostreams。而boost的那套东西经q我的反复用后Q觉得更适合用在文gd和数据持久化上?br>如果要说哪里不如boost的filter_streamQ也是boost的filter_streambuf可以动态配|filterQ而我使用的是模板技术将filter的关pd~译期就兌?jin)v来,所以只能是静态配|filter。下面是具体使用时的完整例子代码Q?br>
 1 #include <ccs/util/ios/ifilter_streambuf.hpp>
 2 #include <ccs/util/ios/ofilter_streambuf.hpp>
 3 #include <ccs/util/ios/memory_terminal.hpp>
 4 
 5 using namespace ccs;
 6 using namespace util;
 7 
 8 // 输出qo(h)
 9 struct my_ofilter
10 {
11     typedef ios::ofilter_tag tag_type;
12 
13     template<typename OutT>
14     std::streamsize write(const char* p, std::streamsize n, OutT& _out)
15     {
16         std::streamsize i = 0;
17         for (; i < n; ++i)
18         {
19             char c = p[i];
20             if (_out.write(&++c, 1!= 1)
21                 break;
22         }
23         return i;
24     }
25 };
26 
27 // 输入qo(h)
28 struct my_ifilter
29 {
30     typedef ios::ifilter_tag tag_type;
31 
32     template<typename InT>
33     std::streamsize read(char* p, std::streamsize n, InT& _in)
34     {
35         std::streamsize i = 0;
36         for (; i < n; ++i)
37         {
38             char c;
39             if (_in.read(&c, 1!= 1)
40                 break;
41             p[i] = --c;
42         }
43         return i;
44     }
45 };
46 
47 // 输出内存讑֤
48 struct memory_odevice
49 {
50     typedef ios::dest_tag tag_type;
51 
52     std::streamsize write(const char* p, std::streamsize n, ios::memory_oterminal& _out)
53     {
54         return _out.write(p, n);
55     }
56 };
57 
58 // 输入内存讑֤
59 struct memory_idevice
60 {
61     typedef ios::source_tag tag_type;
62 
63     std::streamsize read(char* p, std::streamsize n, ios::memory_iterminal& _in)
64     {
65         return _in.read(p, n);
66     }
67 };
68 
69 
70 int main(int _Argc, char** _Args)
71 {
72     char buf[256];
73     ios::memory_oterminal memout(buf, 256);
74     ios::memory_iterminal memin(buf, 256);
75     ios::ifilter_streambuf<ios::memory_iterminal, mpl::list2<my_ifilter, memory_idevice> > insbuf(&memin);
76     ios::ofilter_streambuf<ios::memory_oterminal, mpl::list2<my_ofilter, memory_odevice> > outsbuf(&memout);
77     std::istream is(&insbuf);
78     std::ostream os(&outsbuf);
79 
80     int num = 188;
81     os.write((char*)&num, sizeof(int));
82     os.flush();
83     is.read((char*)&num, sizeof(int));
84 
85     std::cout << num << std::endl;
86     system("pause");
87 }

代码中的意思就是将写入的数据逐字节的?Qƈ保存在内存缓冲里Q然后又从内存缓冲中dQ逐字节减1Qƈ输出到控制台Q一套经q过滤的d便完成?jin)。由于用了(jin)模板元的list作ؓ(f)链接Q在release模式下所有的qo(h)器操作都是内联的Q这虽然也是我预想的效果Q但看完汇编码之后,着实让我高兴了(jin)一晚上Q这U成感真的是programer最大的乐趣?/p>

需要说明的是:(x)代码中的mpl::list2是自己实现的模板元链?..q段旉考虑研究一下boost的ƈ替换q来Q因为那个list后面?让我觉得很不够智?..当然Q如果boost的list实现q于复杂Q或是不能让我的代码完全内联化的话,肯定不会(x)考虑使用?br>
完成q个之后Q我便准备着手构建cge目Q所谓的cgeQ就是cloud game engine的羃?..֐思义是使用?jin)云技术的游戏引擎Q我惛_业余旉试一些颠覆传lcs架构的在U游戏引擎架构设计,具体隄估计?x)?个:(x)
1、运用gpgpu group的ƈ行运技术,考虑使用目前?jng)场占用率最大的nvidia tesla服务器配合cudaQ在服务器用physX实现一定的物理模拟?br>2、在x性较强的在线游戏中,pingg直是最大的挑战Q所以有选择性的使用云计技术,q是架构设计上的挑战?br>关于cge的设计思考和规划Q会(x)另外开贴具体阐qͼq记录开发进度和情况?/span>



]]>
用cmake生成ogre1.7rc的项目文Ӟ哇擦?.....http://www.shnenglu.com/shanoa/archive/2010/10/12/129636.html酿妹?/dc:creator>酿妹?/author>Tue, 12 Oct 2010 10:59:00 GMThttp://www.shnenglu.com/shanoa/archive/2010/10/12/129636.htmlhttp://www.shnenglu.com/shanoa/comments/129636.htmlhttp://www.shnenglu.com/shanoa/archive/2010/10/12/129636.html#Feedback0http://www.shnenglu.com/shanoa/comments/commentRss/129636.htmlhttp://www.shnenglu.com/shanoa/services/trackbacks/129636.html

]]>
析构q程中内存相关错误的l大多数原因http://www.shnenglu.com/shanoa/archive/2010/07/01/119064.html酿妹?/dc:creator>酿妹?/author>Thu, 01 Jul 2010 07:47:00 GMThttp://www.shnenglu.com/shanoa/archive/2010/07/01/119064.htmlhttp://www.shnenglu.com/shanoa/comments/119064.htmlhttp://www.shnenglu.com/shanoa/archive/2010/07/01/119064.html#Feedback11http://www.shnenglu.com/shanoa/comments/commentRss/119064.htmlhttp://www.shnenglu.com/shanoa/services/trackbacks/119064.html今天记录一下长久以来屡ơ犯的错Q每ơ都是换一U方法编码来l过q个问题实现功能的,因ؓ(f)q个问题太过隐蔽Q导致今天才发现其中真正的原?..下面q行问题描述Q?br>
1std::map<std::string, Value> keyValue; // 在函数内部分配的堆栈对象Q局部变量)(j)
2ReadData(keyValue);// 从dll中导出的函数
3keyValue.clear(); // delete中出现assert异常

W一行是在应用程序中的堆栈中分配的内存空间?br>W二行是我自己写的dll库,用来d一些数据加入到keyValue中?br>W三行是清空keyValueQ其实如果不写这一行的话,keyValue也会(x)在函数结时清空Q到那时同样?x)出现错误?br>q一切乍一看没啥问题,keyValue是局部变量,Z么局部变量的释放?x)出现异帔R误呢Q这是因为第二行ReadData的缘故。ReadData的逻辑在另外一个可执行模块中,在其中分配的内存I间不一定与当前模块在同一个堆区?br>我们知道Qstd::map是一个树(wi)l构的容器,我在ReadData内部往keyValue中添加了(jin)数据QkeyValue中会(x)在堆Z分配?wi)节点,而这个节点将?x)在当前模块在keyValue的析构中被释放。也是_(d)我无意中在dll模块中分配了(jin)堆空_(d)又无意中在exe模块中企N放该I间Q这L(fng)行ؓ(f)D错误是不ؓ(f)怪的?br>时刻牢记Q在一个模块中分配和释攑֐一块内存区域,警惕你所看不见的内存分配和释放?/strong>

]]>
完成的网l数据包文档?/title><link>http://www.shnenglu.com/shanoa/archive/2010/04/24/113460.html</link><dc:creator>酿妹?/dc:creator><author>酿妹?/author><pubDate>Sat, 24 Apr 2010 12:34:00 GMT</pubDate><guid>http://www.shnenglu.com/shanoa/archive/2010/04/24/113460.html</guid><wfw:comment>http://www.shnenglu.com/shanoa/comments/113460.html</wfw:comment><comments>http://www.shnenglu.com/shanoa/archive/2010/04/24/113460.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/shanoa/comments/commentRss/113460.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/shanoa/services/trackbacks/113460.html</trackback:ping><description><![CDATA[<p>好久没写blog?jin),q次初步完成?jin)一个文档化的网l流框架Q这玩意儿是pp样叫Q但具体是啥玩意儿呢Q其实就是将|络通讯数据l构l串行化到缓冲里Q再发送到|络的另一端,由另一端再串行化到相应的类型对象里。恩Q这听v来没啥难度呀Q但事实q如此Q呵呵,该架构徏立在asio基础之上Q目前完成了(jin)tcp通讯部分Q基本可以很方便的用了(jin)?br>        为啥我要写这么个架子Q因为网l通讯需要考虑很多情况Q如_包、未接收完整、缓冲不够大{情况,而且在项目开发过E中Q不断的d和修改一些通信协议相关的数据包l构。ؓ(f)?jin)让E序员不要管那么多麻?ch)的情况Q同时易于修改和d新的通讯协议Q于是就写了(jin)q么个架构,不过今天比较忙,q是下次传上用例代码吧,源码可能?x)在不久以后发布的通用库模板库里找到?br>恩,p发布自己的一个开源库Q徏立在stl和boost基础上,可跨q_~译 0 0......<br>到时候再说了(jin)?/p> <img src ="http://www.shnenglu.com/shanoa/aggbug/113460.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/shanoa/" target="_blank">酿妹?/a> 2010-04-24 20:34 <a href="http://www.shnenglu.com/shanoa/archive/2010/04/24/113460.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.shnenglu.com/" title="精品视频久久久久">精品视频久久久久</a> <div class="friend-links"> </div> </div> </footer> <a href="http://www.fqgjz.cn" target="_blank">þþþ޹</a>| <a href="http://www.10zhizui.cn" target="_blank">þùƷ99þþþþ</a>| <a href="http://www.mofeigzs.cn" target="_blank"> þۺϺݺۺϾþü </a>| <a href="http://www.smsunion.cn" target="_blank">þùAV䡪ٶ</a>| <a href="http://www.kanqiuwang.cn" target="_blank">ӰɫۺϾþ</a>| <a href="http://www.jobkey.com.cn" target="_blank">þþøƵ</a>| <a href="http://www.royfq.cn" target="_blank">Ʒþ߹ۿ</a>| <a href="http://www.92dyy.cn" target="_blank">޾Ʒþþ</a>| <a href="http://www.blueheaven.com.cn" target="_blank">97þþþ޾Ʒר</a>| <a href="http://www.foshai.cn" target="_blank">&#228;v뾫Ʒþþ</a>| <a href="http://www.baobaonin.cn" target="_blank">Ů˸߳þþýˮ</a>| <a href="http://www.gongcheng100.cn" target="_blank">97þۺɫۺɫhd </a>| <a href="http://www.0717zf.cn" target="_blank">þ޾Ʒҳ</a>| <a href="http://www.weikoo.cn" target="_blank">þۺɫݺ</a>| <a href="http://www.xmgoogle.net.cn" target="_blank">99þþƷӰԺѼ</a>| <a href="http://www.ter2.cn" target="_blank">þĻ</a>| <a href="http://www.010tk.cn" target="_blank">ĻhdþþƷ</a>| <a href="http://www.chqlt.cn" target="_blank">ƷۺϾþþþþ97</a>| <a href="http://www.u4439.cn" target="_blank">þþƷҹɫA </a>| <a href="http://www.hrleague.cn" target="_blank">þ99Ʒþþôѧ</a>| <a href="http://www.ulpj.cn" target="_blank">þeֻйľƷ99</a>| <a href="http://www.hystech.cn" target="_blank">˳wwwþþ</a>| <a href="http://www.0769zc.net.cn" target="_blank">þþƷ99Ʒ</a>| <a href="http://www.autothink.com.cn" target="_blank">ҹƷþþþþapp</a>| <a href="http://www.dgtspcb.com.cn" target="_blank">Ʒһþþþþþվ</a>| <a href="http://www.vdmo.cn" target="_blank">ŷһþþ</a>| <a href="http://www.km10000.net.cn" target="_blank">þþƷһ</a>| <a href="http://www.lzhoufugen.cn" target="_blank">99þĻ</a>| <a href="http://www.ekqz.cn" target="_blank">ҰĻþ</a>| <a href="http://www.12045.com.cn" target="_blank">޾Ʒþþþþο</a>| <a href="http://www.axtea2007.cn" target="_blank">þ㽶Ƶ</a>| <a href="http://www.ww0w.cn" target="_blank">ĻƷѾþ</a>| <a href="http://www.17714.com.cn" target="_blank">þ99Ʒ鶹</a>| <a href="http://www.lordswar.cn" target="_blank">ƷŮþAV</a>| <a href="http://www.linkyes.cn" target="_blank">ձɫۺϾþӰԺ</a>| <a href="http://www.z1359.cn" target="_blank">99þþþ</a>| <a href="http://www.focuan.cn" target="_blank">þþþù</a>| <a href="http://www.qilehu.cn" target="_blank">þþþþԻAV</a>| <a href="http://www.ssc629.cn" target="_blank">ݺɫþۺѿ</a>| <a href="http://www.dnnmodules.cn" target="_blank">ƷŮþþþAV</a>| <a href="http://www.xin-qi.com.cn" target="_blank">۲ӰԺþùƷ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>