text: 如同缓存溢出错误，迷途指针/野指针这类错误经常会导致安全漏洞。例如，如果一个指针用来调用一个虚函数，由于vtable指针被覆盖了，因此可能会访问一个不同的地址(指向被利用的代码)。或者，如果该指针用来写入内存，其它的数据结构就有可能损坏了。一旦该指针成为迷途指针，即使这段内存是只读的，仍然会导致信息的泄露(如果感兴趣的数据放在下一个数据结构里面，恰好分配在这段内存之中)或者访问权限的增加(如果现在不可使用的内存恰恰被用来安全检测).
  避免迷途指针，有一种受欢迎的方法——即使用智能指针（Smartpointer）。智能指针使用引用计数来回收对象。一些其它的技术包括tombstone法和locks-and-keys法。
  另外，可以使用DieHard内存分配器，它虚拟消除了类似其它内存错误(不合法或者两次释放内存)的迷途指针错误。
  还有一种办法是贝姆垃圾收集器，一种保守的垃圾回收方法，能够替代C和C++中标准内存分配函数。这种方法完全消除了迷途指针的错误，通过去除内存释放的函数代之以垃圾回收器完成对象的回收。
  像Java语言，迷途指针这样的错误是不会发生的，因为Java中没有明确地重新分配内存的机制。而且垃圾回收器只会在对象的引用数为零时重新分配内存。
  为了能发现迷途指针，一种普遍的编程技术——一旦指针指向的内存空间被释放，就立即把该指针置为空指针或者为一个非法的地址。当空指针被重新引用时，此时程序将会立即停止，这将避免数据损坏或者某些无法预料的后果。这将使接下来的编程过程产生的错误变得容易发现和解决了。这种技术在该指针有多个复制时就无法起到应有的作用了。
  一些调试器会自动地用特定的模式来覆盖已经释放的数据，如0xDEADBEEF(Microsoft'sVisualC/C++调试器，例如，根据哪种类型被释放采用0xCC，0xCD或者0xDD)。这种方法通过将数据无用化，来防止已经释放的数据重新被使用。这种方法的作用是非常显着的(该模式可以帮助程序来区分哪些内存是刚刚释放的)。
  某些工具，如Valgrind，Mudflap或者LLVM可以用来检测迷途指针的使用。
  视觉规范沒有一定的标准，究竟是美丑优先，还是使用者体验优先，这都沒有一个准则，当然在最理想的情况下，是能同时符合两者。所以在按钮的使用上，我尝试找出一些规则，来让画面不至于凌乱，并且让使用者可以感受到舒适。而按钮本身有着不同的个性，所以在画面的使用上，也会依据需求的不同，来使用不同个性的按钮。就算是同一个Framework所提供的按钮，也会有相当多样的选择供开发者使用，但是选择一多，往往也会造成困扰。“目前的情况下该用哪种按钮？”上面的问题，我也思考很久，所以整理了几种可能的性给大家参考参考。
  在参加完铁人赛以后，会想要再精进UI设计的部分，所以想试着写设计得文章，接下来会连续几篇UI设计的文章，有些是在铁人赛前就准备好的，最近在重新整理PO出来，希望大家会感兴趣。网路上有许多开源的Framework，通常我都会参考他们的按钮以及表单设计，因为这是最能够表达Framework特色的元件。按钮与表单，按钮更能表达一个Framework的个性，如圆角、颜色填充的方式、预设的色彩变化、单位计算方式(emorpx)等等，当然表单也有，但许多为了实用性，表单会将设计简化。
  图片来源googlematerialdesign看到嫁给RD的UIDesigner的这篇文章有感，想说也写一下我对于这个主题的想法，在工作的流程中，每个人所佔的岗位不同，都会有不同的观点，她的这一篇所在的角色是UI，我的看法是设计师与前端之间的角色。从学设计到现在转职成前端，因为设计背景的关系，所以大部份在执行时都是从设计到切版都是我做，这在执行上并一定是好的流程，只是不同岗位，有不同的观点，同时横跨两个岗位，就会掌握不同的面向，但毕竟是一个人，无法面面俱到，所以这边会提出一些我的看法及解决办法。
  利用Gitbook制作电子书是相当容易的，作者只要熟悉markdown语法以及简易的安装，就可以快速编写属于自己的书籍，它有着以下几点特色。利用git版本控制用git就可以发佈新版本利用markdown语法编写包含手机版这边就简单介绍如何安装gitbookserver在自己本机上，以利于快速与他人合作。注意：本文不会提到git操作，在使用gitbook前，请先熟悉git。