C ++通过引用奇怪行为传递参数

时间:2013-03-23 05:22:04

标签: c++ visual-studio-2010

我有一个非常简单的C ++函数,它通过引用传递一个值:

int read_buf(unsigned char *buf, int num_bytes, unsigned char *input_file, long &position)
      {



          for (int i=0; i<num_bytes; i++){
               buf[position] =  input_file[position];
             //  buf++;
             //  input_file++;
               position = position +1;
          }


          return 0;
    }

并且,如果我只在main()函数中调用此函数,它可以正常工作:

例如:

unsigned char *input_buf = (unsigned char *) malloc(lSize * sizeof(unsigned char));

int result = fread (input_buf,1,lSize,input_file);

rewind (input_file);

unsigned char *test_buf = (unsigned char *) malloc(lSize * sizeof(unsigned char));

long pos = 0;

read_buf(test_buf, 1000, input_buf, pos); 
read_buf(test_buf, 1000, input_buf, pos);
read_buf(test_buf, 1000, input_buf, pos);

而且,当我运行代码时,我可以看到位置增量的值(0 - > 1000,1000 - > 2000,2000 - > 3000)

现在,当我尝试在Object中执行相同的操作时,问题就出现了。 我定义了一个Object,并为“position”变量声明了一个long类型的公共变量,并将上面的EXACT函数定义为该对象的方法。 现在的问题是,当我运行该方法时,“位置”的值不会增加超过541 ??? 例如,当我运行这样的东西时:

  read_buf(test_buf, 1000, input_buf, pos); 

pos的值一直递增到541,突然下一个值,而不是改为542,它变为535 !! ??并且它不断递增,当它达到541时,它会回到535,这种模式不断重复! 我不知道为什么它没有增加简单性就像我在main()函数中使用它的情况一样!!!

有什么想法吗? 非常感谢提前

1 个答案:

答案 0 :(得分:0)

更新

当我将上述功能更改为类似的内容时,我可以看到变量“position”现在增量正常......即使它不能正常工作,因为它在某些其他部分会中断,但至少我可以看到它正在递增。

   int read_buf(unsigned char *buf, int num_bytes, unsigned char *input_file, long &position)
      {
          long temp = position;
          for (int i=0; i<num_bytes; i++){
               buf[temp] =  input_file[temp];
             //  buf++;
             //  input_file++;
            // position = position + 1;
               temp = temp +1;
          }
          position = temp;

          return 0;
    } 

有谁知道为什么第一个不起作用?我相信,当实现(buf [position] = input_file [position])时,“position”的值会更新为Ivalue。 但任何想法,为什么位置的价值在变化? 我确信我没有打到文件末尾。 Input_file有一个巨大的尺寸(超过5000),这种情况发生在很低的位置(仅限位置541)!