我正在编写一个ANSI C程序,并有一个地方我找不到一个错误。我是C新手,所以不要打折明显。C函数之间传递数组调试
我有三个文件在使用。第一个是我使用#include“myheader.h”在其他两个文件中包含的头文件。在这个头文件中,除了别的以外,我还有一个函数原型:
double function1(double *, double *, double *, int *, int, int);
第二个文件包含main()函数。这包括,除了别的以外,可变的挡板的声明为:
int APRON[8] = {1, 2, 3, 4, 5, 6, 7, 8};
在此文件中使用的gdb我观察:
(gdb) p APRON
$1 = {1, 2, 3, 4, 5, 6, 7, 8}
然后这个数组传递到另一个文件(文件3)作为一个参数在下面的函数调用:
zz = function1(aa, bb, cc, APRON, dd, ee);
在file3的,该函数被定义为:
double function1(double *aa, double *bb, double *cc, int *bins, int dd, int ee)
当GDB进入这个文件3,我马上就观察到:
(gdb) p bins
$3 = (int *) 0x7fffffffe390
虽然我愚弄与周围的这里的格式(真的不知道我在做什么),并观察到:
(gdb) p bins[0]
$5 = 1
(gdb) p bins[1]
$6 = 2
(gdb) p bins[2]
$5 = 3
(gdb) p bins[3]
$6 = 4
(gdb) p bins[4]
$5 = 5
(gdb) p bins[5]
$6 = 6
(gdb) p bins[6]
$5 = 7
(gdb) p bins[7]
$6 = 8
gdb为什么改变这个数组的输出?另外,有趣的(在一个糟糕的方式),我看到:
(gdb) p sizeof(bins)
$36 = 8
当它应该是4 * 8 = 32(我观察file2中执行此操作时)。
有人能帮我理解当它进入file3时发生了什么? (为什么它与传入file3之前相比有所不同)。我应该提到其他数组(aa,bb,cc)显示相同的行为,尽管标量(dd,ee)在file3中表现良好。
你的问题不是很清楚的事情,和你的避风港没有公布真正的代码,但我认为你对将数组传递给函数感到困惑。请参阅http://c-faq.com/aryptr/aryptrparam.html和http://c-faq.com/aryptr/aryparmsize.html。 –
APRON如何与APRON_TIE相关?同样,什么是垃圾箱?你不是很清楚...... –