1

我正在尝试查找我定义的“标题”结构数组的长度(标题仅包含一些信息 int 成员,如果这与此处相关)。我通过传递fl、指向数组开头的指针和 来idx尝试这样fl_tails做指向末尾的指针):

int arr_size(header* fl, int idx){

  int cnt = 1; /* Anything passed guaranteed to have at least 1 */ 

  while(fl != fl_tails[idx]){
    fl++; 
    cnt++;
  }
}

我认为这只会推进fl指针并正确生成计数,直到到达终点,但它进入了无限循环。我想知道这是由这个函数中的某些东西引起的,还是我需要在其他地方找到的东西引起的。当我将开头和结尾的地址打印为无符号整数时,它们似乎是无害的——分别是 16777216 和 16777344。也许我对header结构及其大小/对台阶的影响的理解也有问题?

4

4 回答 4

1

我正在查看您的 while 循环,您正在将内存地址与索引处的值进行比较。这将始终评估为真。我相信这就是你得到无限循环的原因。

至于数组的长度,您是否考虑过使用 sizeof() 运算符/函数。

于 2013-02-11T03:47:02.640 回答
1

你想比较地址,所以:

while(fl != &fl_tails[idx])
            ^
于 2013-02-11T03:44:59.053 回答
0

请记住:

 while(fl != fl_tails[idx])

相当于:

 while(fl != *(fl_tails + idx))

所以你正在做的是将指针 fl 与实际值进行比较,因为 (fl_tails + idx) 是一个指针,*(fl_tails + idx) 正在取消引用这个指针以获取它指向的值。

因此,如果您只是比较指针地址以查找数组的末尾,我将更改为:

while(fl != &fl_tails[idx])

这样您就可以将指针与指针进行比较。

至于你得到的值,请记住一个没有指针的指针可以有一个指针持有一个初始化值(来自一些旧程序的一些旧值)。我推荐看这个视频:

http://www.youtube.com/watch?v=f-pJlnpkLp0

于 2013-02-11T03:56:42.640 回答
0

问题是fl_tails[idx]返回不同的指针类型并且fl是不同的指针类型。它们永远不会指向同一个位置(除非它们在联合中),所以我认为程序进入了无限循环。

于 2013-02-11T03:54:06.567 回答