我有一个非常简单的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()函数中使用它的情况一样!!!
有什么想法吗? 非常感谢提前
答案 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)!