关于电子鹦鹉。花了两个小时...

  • 归零归零归ww
  • 2025-05-02 05:39:03
关于电子鹦鹉。花了两个小时,定位并解决了一个比较愚蠢的越界访问的问题。

我有个全局变量,指向字库(索引对应的AVL树)。但是调试时发现,这个字库的指针竟然会在某个时候发生变化,导致很难理解的段错误。这暗示着有越界访问内存的情况,把它给冲掉了。

由于是在路由器上运行的,调试很不方便,捏着鼻子用gdb加printf折腾了半天,终于定位到问题所在:

我用的字库是12*12的,并不是屏幕长宽的倍数。12也不是8的倍数,因此每个字模在纵向需要占用两个字节的位置。这就导致在屏幕的底部绘制文字的时候,会访问到显存之外的内存空间,覆盖掉相邻位置上的变量。

归根结底是屏幕店家提供的demo代码质量太差,没有最基本边界条件检查。早就想吐槽这帮搞嵌入式的写的代码像一样。不过用的时候没有发现问题,那肯定是我自己的问题。我自己的代码也是,谁也别笑话谁。

我没有太多的C语言经验,事后看来这个问题并没有太多弯弯绕,有经验的大佬立刻就能想到问题所在了,而我连gdb都不会用,写了无数个printf在代码里。并且由于基础不牢,还特地翻出CPrimerPlus看了眼。

又菜又爱玩,说的就是我。泪
关于电子鹦鹉。花了两个小时...