
C/C++
文章平均质量分 50
金庆
这个作者很懒,什么都没留下…
展开
-
Fix navmesh countour
【代码】Fix navmesh countour。原创 2023-01-01 10:28:46 · 749 阅读 · 1 评论 -
How are dtLinks created in NavMesh
(Jin Qing’s Column, Nov., 2022) defines a link between 2 polygons.It is an internal data structure.A is owned by its source polygon.The links are used in , to searchall the neighbor polygons, from the current best polygon. has 2 required fields:If the l原创 2022-11-18 09:59:42 · 278 阅读 · 0 评论 -
C++ parameter passing rules
From: https://www.modernescpp.com/index.php/c-core-guidelines-how-to-pass-function-parametersParameter passing expression rules:转载 2022-10-29 10:59:02 · 193 阅读 · 0 评论 -
Naming Conventions for Accessors
【代码】Naming Conventions for Accessors。转载 2022-09-22 15:53:06 · 113 阅读 · 0 评论 -
Visual Studio 2019 Compiler Hangs
Visual Studio 2019 Compiler Hangs(金庆的专栏 2021.7)Discovered by my colleague Shen Yichai:Share a interesting MS Build bug:For file a.cpp, enable optimization for Win64 or XSX. The MSBuild always compiling without error and ending (infinite compile). The原创 2021-07-23 20:25:44 · 209 阅读 · 0 评论 -
Fbx File Format Identifier
Fbx File Format Identifier(金庆的专栏 2021.5)Print the list of FBX file format identifiers.FBX SDK FbxExporter can set the file format identifier which is an int parameter.The commnet says: User does not need to specify it by default.If not specified, plug原创 2021-05-30 09:51:27 · 480 阅读 · 2 评论 -
查找内存错误
查找内存错误(金庆的专栏 2019.12)服务器进程有个偶发的崩溃,breakpad 上传的 minidump 显示调用栈不是出错的代码点,怀疑是内存错误。从日志分析可能触发出错的指令,然后在内网调试环境下测试,很幸运地连续有几次很容易重现了。后来反复测试可知,发送某个特殊 GM 指令 200 次就会出现一次错误,一般会在 100 次内出现。但是以代码反复执行千次万次都不能重现,估计与时...原创 2019-12-16 17:59:17 · 1978 阅读 · 0 评论 -
“Use MFC in a Static Library” -> CRT static
VC “Use MFC in a Static Library” -> CRT staticCRT 动态就不能编译。原因大概是MFC的静态连接库使用了静态CRT(runtime library)。一般库的编译都是动态CRT,如wxWidgets库,看来MFC应该动态连接才能与其它库相容。MFC动态连接是否会造成目标机器因缺少DLL无法运行?找了几个机器发现都可以运行。查看一文:VC下使用stl如何原创 2006-05-15 16:01:00 · 2214 阅读 · 0 评论 -
VC win32 app + wxWidgets 链接错误
因为Win32 Application Wizard没有加入相关的库。试加入以下库:comctl32.librpcrt4.lib (仅DEBUG需要)原创 2006-05-18 13:08:00 · 1708 阅读 · 0 评论 -
std::map遍历删除某些元素问题
typedef map INT2STR; INT2STR m; ... ... for (INT2STR::iterator itr = m.begin(); itr != m.end(); ++itr) { if (Condition(*itr)) m.erase(itr); } itr删除与原创 2006-05-22 16:48:00 · 5482 阅读 · 0 评论 -
Release版才出现的错误如何纠错
有的程序运行中出现内存错误:0x00xxxxxx地址,,,某内存不可以读或写...该错误仅在Release版中出现,在Debug版中不出现,无法调试。例如:std::map遍历删除某些元素问题 仅在Release版中出错。对于这类错误,一般程序员都无能为力,只有对整个程序代码仔细阅读,人工纠错。对于高手可能直接在错误出现时打开调试器,查看汇编代码纠错。对于调试能力强的程序员,可以根据错误地址,定位原创 2006-05-23 09:35:00 · 1584 阅读 · 0 评论 -
VC高级调试技术
http://luckynet.nipz.com/programming/c/learnvc/004.html是 【PDF】深入编程内幕Visual 其中一章。只试过条件断点。数据断点总是不让设置。原创 2006-05-23 16:03:00 · 2145 阅读 · 0 评论 -
C语言HTML解析器ekhtml的VC编译
C语言HTML解析器ekhtml的VC编译El-Kabong 是一个快速的,不带验证的,SAX接口的HTML解析器。 可从sourceforge下载源码。* 最新版本ekhtml-0.3.2.但是有一些重要的错误修正没有发布。应从CVS下载最新版本。实际上已经是v0.3.3,只是未发布。* MinGW编译不成功,好象是include目录没设对。Linux下编译成功。* dsp, dsw文件好象是无原创 2006-10-10 15:52:00 · 12743 阅读 · 14 评论 -
一例析构顺序造成的错误
类中成员变量定义的顺序会有什么影响?应该是没有,平时谁会去注意下面代码中m_xxx, m_yyy的先后次序呢?class CXxx;class CYyy;class CZzz;{ ...private: CXxx m_xxx; CYyy m_yyy;}其实是有区别的,就是定义顺序造成析构顺序不同。本例就是实际DEBUG过程中发现的析构顺序造成的错误。(VC环境)代码中m_yyy的原创 2006-05-24 09:48:00 · 1564 阅读 · 0 评论 -
不小心,代码重构产生严重错误,狂占内存
喜欢把以下代码 if (cond > CONDTION) { aaa(); bbb(); ccc(); } return; 改为 if (cond原创 2006-06-05 17:54:00 · 1414 阅读 · 0 评论 -
编写一段代码,其功能是打印代码本身
编写一段代码,其功能是打印代码本身#includemain(){char *c="#include%cmain()%c{%cchar *c=%c%s%c;%cprintf(c,10,10,10,34,c,34,10,10);%c}";printf(c,10,10,10,34,c,34,10,10);}以上代码来自:编写一段代码,其功能是打印代码本身。该代码将自身编为单行的字符串然后打印,并使用AS原创 2006-11-02 13:11:00 · 2435 阅读 · 1 评论 -
质疑fread()的块方式读取
size_t fread( void *buffer, size_t itemsize, size_t count, FILE *stream );以前调用fread()总是用字符方式, 即itemsize = 1.现在偶尔应用了一下块方式, 将 itemsize 设为一个结构的大小, 而 count = 1.正常情况下是没问题. 如果文件大小不足一个结构, 返回应该是0. 可原创 2006-06-06 16:39:00 · 1492 阅读 · 0 评论 -
VC "post-built step" 的妙用
VC IDE:Project -> Setting -> Post-build Step 可以添加编译连接完成时额外执行的命令。一般用来将编译生成的执行程序或库文件复制到别的目录。使用$(targetpath)命令, 就可以执行目标程序。多数人不知道的是: 执行程序或命令的输出为Build输出窗口。如果输出为:d:/workspace/project1/test.h(28):Assertion原创 2006-06-09 16:29:00 · 3109 阅读 · 0 评论 -
作业调度问题深度搜索定界算法
作业调度问题深度搜索定界算法深度搜索定界设有n台处理机p1,p2,......pn,和m个作业j1,j2,...jm,处理机可并行工作,作业未完成不能中断,作业ji在处理机上的处理时间为ti,求解最佳方案,使得完成m项工作的时间最短?Pascal代码实现:http://blog.youkuaiyun.com/jq0123/archive/2006/06/05/773593.aspx本文用C++实现,方便C/C原创 2006-06-12 12:50:00 · 3116 阅读 · 0 评论 -
指针类型转换后, 指针值会改变
#include cstdlib>#include iostream>using namespace std;struct IBase...{ int a; };struct IA: public IBase...{ int aaa;};struct IB: public IBase...{ int bbb;};struct CChild: pu原创 2006-11-07 12:04:00 · 1912 阅读 · 0 评论 -
`ios_base' undeclared 错误及解决
本来可编译的代码,换了个低版本的RedHat就报错: “`ios_base undeclared (first use this function)”估计是低版本的g++所配的libstdc++有问题,但不知如何简单的解决。还好一搜就查到一个帖子:http://mailman.powerdns.com/pipermail/pdns-users/2003-October/000771.html原创 2006-07-06 13:16:00 · 2306 阅读 · 0 评论 -
max() 的宏实现与模板函数实现
max() 的宏实现与模板函数实现宏实现#define max(a,b) ((a) > (b) ? (a) : (b))只能处理int类型的内联函数实现inline int max(int a, int b) { return a > b ? a : b; }模板实现templateinline const T& max(const T& a, const T& b){ return a > b原创 2006-11-16 12:53:00 · 2089 阅读 · 0 评论 -
一个hash_map使用错误
一个hash_map使用错误g++的 hash_map 运行不起来#include #include using namespace std;using namespace __gnu_cxx;namespace __gnu_cxx{ template { size_t operator()(const string& s) const原创 2006-07-20 16:44:00 · 4030 阅读 · 2 评论 -
你知道namespace别名吗
下面的代码中MY象一个变量一样被定义: namespace MY = MY_NAME_SPACE_NOT_OTHERS;就是一个namespace别名。别名的作用应该一望便知:简化。namespace MY_NAME_SPACE_NOT_OTHERS{ class A{}; class B{};}main(){ namespace MY = MY_NAME_SPACE_NO原创 2006-07-18 17:40:00 · 1799 阅读 · 0 评论 -
为需要动态分配内存的类声明一个拷贝构造函数和一个赋值操作符
为需要动态分配内存的类声明一个拷贝构造函数和一个赋值操作符摘自effectiveC++第11条例如这个类里没有声明赋值操作符和拷贝构造函数,这会带来一些不良后果。class CFoo {public: CFoo() {data = new char[10];} ~CFoo() {delete [] data;} // 没有拷贝构造函数和operator=private: char *dat原创 2006-11-24 13:19:00 · 1582 阅读 · 0 评论 -
半天时间找到原因却仍未解决的Bug
半天时间找到原因却仍未解决的Bug在一个巨大的数据文件作为输入时, 出现了一个assert断言错误.花了半天时间跟踪代码, 费尽心思找到了错误的来源, 可是一时间也没有解决的办法, 只能打个临时补丁.类里面有个成员变量 std::ofstream m_ofs; 在某个方法里面的断言警告: assert(!m_ofs); 流操作之后都有一个状态判断: if (原创 2006-07-17 17:21:00 · 1360 阅读 · 0 评论 -
纠错一个Python程序引发的讨论
纠错一个Python程序引发的讨论“一个Python程序引发的讨论”确实热烈。在此提一小错, 也是stl的一个应用示例。 C/C++(3):周星星/蒋黎(4.5s) int main( void ) { set emails( istream_iterator(ifstream( "email.txt" )), istream原创 2006-07-20 12:15:00 · 1816 阅读 · 1 评论 -
不可思议:using namespace无效!(1)
不可思议:using namespace无效!(1)C++ namespace与name lookup之惑问题由 清风雨 于2005年底在 “namespace 和 操作符重载” 一文中提出,讨论众多,但疑惑未解。翻到此文时觉得不可思议,可事实如此,试了多个编译器都是相同结果。试图去解释,可是过后细想还是有问题。经查阅相关概念,大胆猜想并编码求证,终于有了一个合理解释,希望与大家共同研究。原文中,原创 2006-07-25 14:13:00 · 3582 阅读 · 0 评论 -
不可思议:using namespace无效!(3)
不可思议:using namespace无效!(3)C++ namespace与name lookup之惑续不可思议:using namespace无效!(1)不可思议:using namespace无效!(2)std空间中已定义的operatorstl里面pair定义最简单,stl_pair.h也不包含其它头文件,其中就有一个operator所以 #include 试试,确实有问题。再试试自定原创 2006-07-28 10:11:00 · 2751 阅读 · 0 评论 -
不可思议:using namespace无效!(2)
不可思议:using namespace无效!(2)C++ namespace与name lookup之惑 续不可思议:using namespace无效!(1)问题是否出在std::sort()里面?为了让问题更清晰,我们把std::sort()原码提出来。将std::sort()中相关代码提出,生成std::my_sort().#include #include class testClass原创 2006-07-28 10:05:00 · 2138 阅读 · 0 评论 -
一例奇怪的编译错误(VC6)
一例奇怪的编译错误(VC6)VC6 编译下段代码会报错.将出错行 if (mmm.end() == itr) // ERROR改写为 if (itr == mmm.end()) // OK就可通过.(g++可以通过.)/**//* error C2679: binary == : no operator defined which tak原创 2006-08-01 17:26:00 · 10489 阅读 · 0 评论 -
log4cpp应用速成手册
log4cpp应用手册1 下载log4cpp并解压。2 打开/log4cpp-0.3.4b/msvc6/msvc6.dsw 编译log4cpp工程Release版。 3 将编译后的log4cpp.lib复制到VC的Lib目录中。4 将头文件的目录log4cpp-0.3.4b/include/log4cpp/ 复制到VC的Include目录. (或者添加log4cpp-0.3.4b/inc原创 2006-08-09 17:22:00 · 12890 阅读 · 0 评论 -
操作符'='应该返回常量吗
操作符=应该返回常量吗string x, y, z;x = y = z = "hello";string::operator = 返回了一个引用,所以上面的链式赋值就可以进行了。等价于x = (y = (z = "hello"));string::operator = 返回值是string &, 为什么不是 const string & ?这样可以防止 (x = y) = z;原创 2006-12-11 17:26:00 · 1312 阅读 · 0 评论 -
初始化的顺序
类成员是按照它们在类里被声明的顺序进行初始化的,和它们在成员初始化列表中列出的顺序没一点关系。class CFoo{public: CFoo();private: const int ONE, TWO, THREE;};// 初始化列表顺序有误!CFoo::CFoo() : THREE(3) , TWO(THREE - 1) , ONE(TWO - 1){ p原创 2006-12-30 10:45:00 · 1381 阅读 · 1 评论 -
实现赋值操作符要注意的问题
实现赋值操作符要注意的问题* 赋值操作符实现的简例CFoo & CFoo::operator=(const CFoo & rhs){ if (this == &rhs) return *this; // 防止自赋值 // assign to all data members // ...原创 2007-01-06 13:25:00 · 2307 阅读 · 8 评论 -
宽字符,爱你不容易
看了 宽字符的输出 一文,也想试用下stlport5.1 + mingw 的宽字符。以前也试过,不过在mingw上好象并不支持wcout,libstd++不支持,stlport 较早版本也不支持。现在stlport5.1终于让mingw有了宽字符了!写个简单的代码:#include using namespace std;int main(){ wcout.imbue(locale(""))原创 2007-02-08 17:43:00 · 2360 阅读 · 0 评论 -
TCP截包分段重组的设计
TCP截包分段重组的设计功能-------TCP报文段会有失序,重复,对于截包还会有丢包。在进行上层协议分析之前,需要对TCP报文进行重组。分段重组是对TCP数据进行重新排序,丢序重复的数据,并指示数据的丢失。输入-------重组只处理单向数据流,所以一个TCP连接需要分别处理两个方向的数据流。重组的数据假定已经检查了检验和。截包重组忽略TCP窗口的大小。简单地讲,重组仅关心TCP序号,应答号,原创 2007-01-07 11:43:00 · 14386 阅读 · 15 评论 -
VC6+STLport-5.1.0编译log4cpp-0.3.4b
将VC6的stl库与IOStream替换为2006年底最新发布的STLport-5.1.0后,需要重新编译原来的log4cpp库。原来的log4cpp库版本为0.3.4b,一直用着,暂时没有升级版本的需要。(log4cpp最新版本0.3.5rc3要改多处代码才能在VC下编译,感觉不是一个可发布的版本,也没有什么实质性更新。)不过发现原来通过编译的log4cpp-0.3.4b有编译错误,需要更改才能原创 2007-02-02 12:02:00 · 2854 阅读 · 1 评论 -
TortoiseSVN的Overlays图标造成VC编译出错
SVN的Windows客户端TortoiseSVN(TSVN)的Overlays图标会造成VC编译出报错:fatal error C1083: Cannot open precompiled header file: ... : Permission denied在TSVN设置Icon Overlays, 添加Exclude paths就好了。参见:TortoiseSVN VC6 C1083原创 2007-02-05 12:09:00 · 1804 阅读 · 0 评论 -
为什么VC6的Profile菜单总是灰的
VC6的Profile是一个很有用的功能。可是你可能发现Profile菜单总是灰的,处于被禁用状态,不管是否打开了相关的编译选项。有时重装VC会恢复可用。你也可能发现其实该菜单仅在某一用户下可用,其它用户是灰的,可用的用户就是安装VC的用户。这是VC6的一个错误,修正它很容易,添加一个REG_DWORD注册表项值:HKEY_LOCAL_MACHINE/Software/Microsoft/De原创 2007-06-26 15:13:00 · 2980 阅读 · 4 评论