2013-03-23 27 views
0

我有一個非常簡單的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()函數中使用它那樣簡單地遞增!

有什麼想法? 提前感謝

+1

而不是用文字描述它,你可以發佈非工作代碼?我想這就是上面的紳士正在做的事情。 – 2013-03-23 05:51:20

+0

@JohnKugelman:代碼相當複雜。這是別人的代碼,我正在挖掘。有一個抽象類和少數派生類。此方法是其中一個派生類的特定方法。 – user2201373 2013-03-23 06:20:12

+0

@ user2201373:但是這個其他代碼就是問題所在,因爲你給我們展示的代碼看起來很好。嘗試複製和減少調用它的代碼,創建一個[SSCCE](http://sscce.org/),或者你已經發現了這個問題(我會說至少有50%的機會和**,這是爲什麼它很重要*你*做到這一點!**)或者你可以發佈一些讓我們能夠幫助你的東西。 – 2013-03-23 06:32:50

回答

0

更新:

當我改變了上述功能,這樣的事情,我可以看到變量「位置」的增量現在沒事了......好吧,即使它完全不是那麼回事,因爲它在其他部分中斷,但至少我可以看到它正在遞增。

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])被執行時,「位置」的值被更新爲Ivalue。 但任何想法爲什麼位置的價值正在改變? 我相信我沒有擊中文件結尾。 Input_file具有巨大的尺寸(超過5000),並且這種情況發生在低位(僅在位置541附近)!

+1

所以,這是代碼的另一個例子,*不能解釋你的問題。這可能不足以幫助你。代碼的第三個例子可以正常工作,但並不能舉例說明您的問題。 – 2013-03-23 20:32:30