Romi-知行合一

轻轻的风轻轻的梦,轻轻的晨晨昏昏, 淡淡的云淡淡的泪,淡淡的年年岁岁。
  博客园  :: 首页  :: 新随笔  :: 订阅 订阅  :: 管理

gdb调试数组时的问题

Posted on 2012-08-31 19:14  romi  阅读(1483)  评论(0编辑  收藏  举报

代码如下:

 1 //使用非递归,通过归纳验证总结出规律,枚举处元素个数
 2 int64 f_n(int64 m,int64 n)
 3 {
 4     int64 a[m][n];
 5     int i,j;
 6     for(i=0;i<n;i++)
 7     {
 8         a[0][i]=i+1;//每列第一个元素
 9     }
10     for(i=0;i<m;i++)
11     {
12         a[i][0]=i+1;//每行第一个元素
13     }
14     for(i=1;i<m;i++)
15     {
16         for(j=1;j<n;j++)
17         {
18             a[i][j]=a[i][j-1]+a[i-1][j];
19         }
20     }
21     return a[m-1][n-1];
22 }

在上面代码的21行设置了断点,使用gdb调试,看数组a在栈中存放

输入p &a[0][0]时出现如下错误:

Cannot perform pointer math on incomplete types, try casting to a known type, or void *.
百思不得其解,后来在stackoverflow上找到了答案,链接如下:http://stackoverflow.com/questions/6007440/why-i-cant-watch-the-expression-a11-after-declare-it-by-ann-in-c

调试时数组长度必须确定,将a[m][n]改为a[100][100]即可

随便说一句,stackoverflow真是个好东西