2011-06-03 83 views
0

我有一個T類型的數組,它作爲指針參數傳遞給函數。 問題是,我無法正確地將新數據寫入此數組,而沒有在第二次嘗試中獲取內存違規。將自定義數組傳遞給函數的問題(C++)

在此代碼中,我從文本文件中讀取整數並將它們傳遞給函數(T類模板類的一部分),以便將它們附加到數組中。

當我完成追加整數後,我想在Main中使用相同的數組。

有人知道代碼有什麼問題嗎?

謝謝,最大

template<class T> int CFile<T>::read(T **apBuf, int aNum) 
{ 
int readCounter = 0; 

*apBuf = (T*)malloc(sizeof(T)*aNum); 


for (int i = 0; i<aNum; i++) 
{ 
    T var = read(); 

    if (var == NULL) 
    { 
     if (isEof) 
     { 

      return readCounter; 
     } 
     else 
     { 
      perror ("Error Reading File - Insufficient var type"); 
      return -1; 
     } 
    } 
    else 
    { 
     *apBuf[i] = var; 

     readCounter++; 
    } 
} 



return readCounter; 

} 
+0

你可以多加一點這個問題嗎?究竟在哪裏,它失敗了?什麼'read()'(沒有參數)呢? – 2011-06-03 20:06:34

+0

無參數read()從文本文件中讀取T成員,一次一個。 我的問題已解決,謝謝。 – max12345 2011-06-03 20:19:51

回答

2
*apBuf[i] = var; 

這被分析爲,如果它被寫:

*(apBuf[i]) = var; 

這顯然不是你想要的; apBuf是指向數組的指針;您將它視爲指向數組的指針,並且您正在取消引用它的第i個元素。你真正的意思是:

(*apBuf)[i] = var; 

*apBuf給你「的對象指向apBuf」,這是數組;那麼您將獲得數組的第i個元素。

這就是說,這很不尋常:爲什麼不把數據累積到std::vector<T>並從函數返回?那麼你不必擔心顯式的動態內存管理。 (另外,T總是一個指針類型?如果不是,那麼var == NULL就沒有意義了。)

+0

謝謝!該死,我試圖解決這個問題好幾個小時。多麼美好的地方。 – max12345 2011-06-03 20:09:17

+0

我寧願使用矢量 - 當然,但我寫這個程序不是爲了我自己,而是爲了大學的任務。他們給嚴格的rools如何做到這一點。 – max12345 2011-06-03 20:13:20

+0

最好是學習正確的方法來編寫代碼,正確地編寫代碼,然後與你的教授們爭論(至少,這就是我所做的,而且我學到了更多的東西,而不是盲目地跟隨着我們規則)。 – 2011-06-03 20:15:04

0

你遇到的一個問題是你使用malloc而不是新的。如果T是一個類,構造函數將不會被調用。

+0

謝謝。會改變它。 – max12345 2011-06-03 20:14:18

1

那麼,你用malloc分配數組,然後試圖分配給它。這是未定義的行爲,因爲您必須構建對象。

哦,你應該真的真的考慮使用自擁有資源類,因爲malloc和一般這種編程風格是可怕不安全。如果T的拷貝構造函數拋出一個異常呢?內存泄漏。只是例如。