我有一個非常簡單的C++功能,即經過參考值傳遞參數: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中做同樣的事情時,問題就出現了。 我定義了一個對象,並且我爲「position」變量聲明瞭一個類型爲long的公共變量,並將EXACT上面的函數定義爲該對象的一個方法。 現在的問題是,當我運行該方法時,「位置」的值不會增加超過541? 例如,當我運行是這樣的:
read_buf(test_buf, 1000, input_buf, pos);
Pos的值不斷遞增到541,然後突然的下一個值,而不是更改爲542,它進入535 !! ??它不斷增加,當它達到541時,它會回到535,這種模式不斷重複! 我不知道爲什麼它不像我在main()函數中使用它那樣簡單地遞增!
有什麼想法? 提前感謝
而不是用文字描述它,你可以發佈非工作代碼?我想這就是上面的紳士正在做的事情。 – 2013-03-23 05:51:20
@JohnKugelman:代碼相當複雜。這是別人的代碼,我正在挖掘。有一個抽象類和少數派生類。此方法是其中一個派生類的特定方法。 – user2201373 2013-03-23 06:20:12
@ user2201373:但是這個其他代碼就是問題所在,因爲你給我們展示的代碼看起來很好。嘗試複製和減少調用它的代碼,創建一個[SSCCE](http://sscce.org/),或者你已經發現了這個問題(我會說至少有50%的機會和**,這是爲什麼它很重要*你*做到這一點!**)或者你可以發佈一些讓我們能夠幫助你的東西。 – 2013-03-23 06:32:50