<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>我的bug大全 on kamuszhou&#39;s blog</title>
    <link>https://ykyi.net/tags/%E6%88%91%E7%9A%84bug%E5%A4%A7%E5%85%A8/</link>
    <description>Recent content in 我的bug大全 on kamuszhou&#39;s blog</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Sat, 23 Mar 2013 03:32:22 +0000</lastBuildDate>
    <atom:link href="https://ykyi.net/tags/%E6%88%91%E7%9A%84bug%E5%A4%A7%E5%85%A8/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>我的BUG大全。</title>
      <link>https://ykyi.net/?p=947/</link>
      <pubDate>Sat, 23 Mar 2013 03:32:22 +0000</pubDate>
      <guid>https://ykyi.net/?p=947/</guid>
      <description>&lt;p&gt;在这里记下我的程序BUG&lt;/p&gt;
&lt;h1 id=&#34;buff溢出后把栈破坏了这个线程也没崩溃一直死循环在一小段不可知的代码里&#34;&gt;buff溢出后，把栈破坏了，这个线程也没崩溃，一直死循环在一小段不可知的代码里。&lt;/h1&gt;
&lt;p&gt;#调用getaddrinfo很多次以后，getaddrinfo报错：No address associated with NAME。非常地奇怪呀&lt;del&gt;后来把同样的程序部署到比较旧的linux上，报错: Too many open files。才明白，原来fd被用光了。回头再检查相关代码，果然如此~补上close(fd)后，getaddrinfo的问题也解决了。启发是：1. 有些报错信息其实离真正的错误原因很远。2. 一个系统调用一开始正常，跑了很多次后失败，应该怀疑是不是有资源泄露。&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;#把uint_t类型赋值给std::string时，会崩溃在std::string里面。&lt;/p&gt;
&lt;p&gt;#当一个预期统一的规则出现特例的时候容易出现BUG. 关联订单，关联片区，入货地址都指受YYYY-MM-DD HH:MM:SS的时间戳，但同机分析接受的时间戳却是YYYYMMDD某一天的时间戳。有一个组合需求是同时导出上述4个小需求时，由于传入的时间戳参数不一致导致了BUG.&lt;/p&gt;
&lt;h1 id=&#34;vectorpush_back可能会重新分配vector的内存导致指向之前元素的引用和指针失效一个stdfunction持有一个stdref指向vector中的一个元素当这个funcction被调用的时候vector中的这个元素已经失效了&#34;&gt;vector::push_back可能会重新分配vector的内存，导致指向之前元素的引用和指针失效.一个std::function持有一个std::ref指向vector中的一个元素，当这个funcction被调用的时候，vector中的这个元素已经失效了。&lt;/h1&gt;
&lt;p&gt;&lt;span style=&#34;font-size: 13.3333330154419px; line-height: 13.8666658401489px;&#34;&gt;# 用boost::optional记录一个信息。这个信息没及时在clear函数里做清理。于是，观察到的情况时，这个信息总是被打印。但一开始，我们却怀疑是另外的函数不稳定而重新生成了该信息。&lt;/span&gt;&lt;/p&gt;
&lt;h1 id=&#34;在写一个匹配函数时待匹配操作数是一个字符串我没有考虑字符串是空串的情况&#34;&gt;在写一个匹配函数时，待匹配操作数是一个字符串，我没有考虑字符串是空串的情况。&lt;/h1&gt;
&lt;h1 id=&#34;在比较旧的gcc-412上把shared_ptr赋给weak_ptr时崩溃溃在atomic_exchange_and_add一开始怀疑是旧版gcc对boost的智能指针支持的不够好后来发现是因为weak_ptr此时已经失效了原因是用handler的参数持用shared_ptr的引用做生命期管理时传错了参数使得这个对象已经被销毁了&#34;&gt;在比较旧的gcc 4.1.2上把shared_ptr赋给 weak_ptr时，崩溃。溃在atomic_exchange_and_add。一开始怀疑是旧版gcc对boost的智能指针支持的不够好，后来发现是因为weak_ptr此时已经失效了。原因是用handler的参数持用shared_ptr的引用做生命期管理时，传错了参数，使得这个对象已经被销毁了。&lt;/h1&gt;
&lt;h1 id=&#34;现象一个依赖某布尔变量的逻辑大多数时候正常少部分时间异常期望这个布尔变量是false有时候陌名其妙变成了true&#34;&gt;现象：一个依赖某布尔变量的逻辑大多数时候正常，少部分时间异常。期望这个布尔变量是false，有时候陌名其妙变成了true。&lt;/h1&gt;
&lt;p&gt;原因是此布尔变量未被初始化，大多数时候它的值是false，但有时却不是。&lt;/p&gt;
&lt;p&gt;#. 现象rmap_item泄露.&lt;/p&gt;
&lt;p&gt;Fix it: 单链表插入新结点时指针操作出错。应该是new-&amp;gt;rmap_list = _item，被我写成 new-&amp;gt;rmap_list = (_item)-&amp;gt;rmap_list.&lt;/p&gt;
&lt;p&gt;#. 我意图注释掉某行代码，却鬼使神差注释错了一行代码。&lt;/p&gt;
&lt;p&gt;#. 变量名 pkt 和ptr 很像，在用memcpy函数时用错了变量导致bug. 一块内存被莫名其妙的修改了，很有可能是因为像刚才这样写这块函数的参数填错了。&lt;/p&gt;
&lt;p&gt;#. _sessions.erase(ite++);删除了_sessions维护的一个对象.对象的析构被调用，会有一连串对象的析构因此而被调用。这些对象中的指针很可能就失效了。但是，在代码的其它地方还能拿到这个指针。野指针啊！！！今天这个例子中是session维护的ip_pkt对象都被析构了，ip_pkt中的指针也都失效了。于是，一使用野指针，崩溃了。&lt;/p&gt;
&lt;p&gt;#. 删除数据时，总是要注意其它代码中指向这些被删除数据的引用或指针。&lt;/p&gt;
&lt;p&gt;#. 解引用container.end()返回的迭代器会崩溃。&lt;/p&gt;
&lt;p&gt;#. 这是个腾讯视频广告投放组的bug. 一个线程负责开，关FD。另一个线程读写FD。两个线程的竞争条件造成了BUG.&lt;/p&gt;
&lt;p&gt;#. 写代码时偷懒复制代码，然后忘记做相应更改，视觉上很难在第一时间察觉，却在后期花费了几倍时间调试程序。&lt;/p&gt;
&lt;p&gt;#. 写判断语句时，判断表达示如 container.empty()之前是否要取反，经常搞错。&lt;/p&gt;
&lt;p&gt;#. htonl 写成 htons&lt;/p&gt;
&lt;p&gt;&lt;span style=&#34;font-size: 13px;&#34;&gt;#. std::distance 计算两个迭代器之间距离时死循环，是因为迭代器没有初始化。而我之前想，作初始化工作的函数已经调用了，实际上并没有被调用。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&#34;font-size: 13px;&#34;&gt;#. 没注意函数的返回值. 有时函数返回0时表示成功，即true的含义。所以看到一些和预期刚好相反的现象时，应该考虑是不是出现了这样的错误。&lt;/span&gt;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
