摘要:之前对数组的概念一直没有理解透彻,只觉得数组名就是个常量指针而已,用法和基本的指针差不多。所以当我尝试用二级指针去访问二维数组时,就经常会出错。下面就是刚开始写的一个错误的程序:#include <stdio.h>int main(){ int iArray[2][3] = {{1,2,3},{4,5,6}}; int **pArray = NULL; pArray = iArray; printf("array[0][0] = %d\n", pArray[0][0]); printf("ar...
阅读全文
摘要:我们知道c语言中的程序中的数据根据分布一般可以分为三种,一种是分布在数据段中的,一种是分布在栈上的,还有一种分布是堆上。全局变量往往都存放在数据段中,而函数中声明的变量一般都存放在栈上,而用malloc或者calloc分配出来的空间则是在堆上。但是我之前一直不知道这数据段、堆还有栈到底在内存上是怎样分布的,更不知道它们之间的距离是多少,也不会根据数据的指针来判断数据的类型。但是前些日子,为了跟踪一个数据莫名被修改的问题,终于对这堆栈的分布有了个形象的了解。 在《UNIX环境高级编程》中提到:对于x86处理器上的Linux,正文段从0x08048000单元开始,栈底则在0xC0000000之下.
阅读全文
摘要:在linux下编程的调试工具往往比较少,其中比较有名的就是gdb。而由于程序都是在ARM板子上跑,往往会由于资源不够,连gdb都无法运行。所以之前调试跟踪问题往往也只是用简单的printf来解决,都没怎么用过gdb。但是今天遇到了一个printf无法跟踪的问题,这时才想起来gdb。通过应用gdb,发现gdb功能真是强大,下面记录了一下我用到的命令。./gdb testprogram :表示用gdb去跑testprogram这个程序,由于我的gdb程序是在当前目录下,所以前面加了./ 如果gdb在系统环境变量的目录中(比如/bin)的话就直接运行gdb testprogram就行。ps:有时候.
阅读全文