存档

文章标签 ‘c++’

vector,list中的遍历删除

2006年6月25日

很普通的算法,在一个循环中检查每个元素,判断条件,如果为真,就删除这个节点,再继续循环.看似简单,但是却一个不大不小的陷阱,这种小问题的结论,总是记不住,每次遇到的时候,都得写一个测试程序来验证,干脆总结一下,做个结论
最简单的方法

std::remove_if(_First, _Last, Predicate)

STL是用模板实现,简单高效,但是很多情况下,需要在循环中处理其他逻辑,不能直接使用这个函数
阅读全文…

分类: 技术研究 标签: , , ,

诡异的gcc编译错误

2006年6月5日

最近一直在linux上写程序,先把x windows上所有听说过没有听说过的IDE都装了一遍,非常的不好用,然后又逐个的试windows上的远程调试软件,如Magic c++,uniwin等,还是国人写的软件,都用不了,甚至Magic c++在网站上提供的for linux的免费版本,编译都会报错。最后还是老老实实的用ssh登陆上去,make+ gdb. 虽然不是很熟练,但是还是稳定能用。

只遇到有一个问题,当单步进入switch-case scope,看不到任何栈信息

switch(messageType) {
        case P2P_FOOR: 	{
              int piece_index=0;
              int nothing;
               ...
             } break;

info locals 什么也看不到,谁能告诉我为什么

阅读全文…

分类: 技术研究 标签: , ,

多线程静态方法重入错误

2006年4月6日

Static function variable in multithread

今天花了4个小时来折腾这个.在写一个多线程下载程序,突然发现下载下来的数据包不对,先是怀疑数据拼接有问题,然后是怀疑网络传送端有问题,一个一个的dump出来看.然后用脚本一个一个字节的比对.最后,才知道原来是这个.

void CSimpleSocket::Read(string &buf)
 {  
    static char buf[BUF_SIZE];     //...
}

这种function scope 的static 变量,多线程使用会被反复的修改.

libc time.h里面几个函数不是线程安全,就是这个原因.这样做,其实也省不了多少资源,去掉static不过多了两条push stack的指令.这种优化强迫症,自从学了汇编以来一直这样.有个重要原则是

先把事情做正确

分类: 技术研究 标签: ,