2013-10-29 41 views
0

我有下面的類:C++增加值,以一種矩陣

class clsJoinFeeder 
{ 
public: 
    vector<vector<unsigned char> > UnsignedChars; 
}; 

現在我想爲unsigned char型向量添加到類。 我試圖做這樣的:

void CBinLoader::LoadJoinFeaturesFromCompiledDat(clsJoinFeeder &uJoinFeeder) 
{ 
    for (unsigned int y=0;y<2;y++) 
    { 
     for (unsigned int x=0;x<17;x++) 
     { 
      pLoadSmallFloatMap(uJoinFeeder); 
      pLoadBigUnsignedCharMap(uJoinFeeder); 
     } 
    } 
} 

void CBinLoader::pLoadBigUnsignedCharMap(clsJoinFeeder &uJoinFeeder) 
{ 
    unsigned int iItemsCount = 0; 
    fread(&iItemsCount,sizeof(unsigned int),1,m_infile); 

    unsigned long iByteSizeActualData = 0; 
    fread(&iByteSizeActualData,sizeof(unsigned long),1,m_infile); 

    vector<unsigned char>nChars; 
    nChars.resize(iItemsCount+1); 

    fread(&nChars[0],iByteSizeActualData,1,m_infile); //works fine. nChars is correctly filled 

    uJoinFeeder.UnsignedChars.push_back(nChars); //here the crash occurs 
} 

它編譯罰款,但在運行時將其與堆ALLOC錯誤在該行崩潰:

uJoinFeeder.UnsignedChars.push_back(nChars); 

我能做些什麼來解決這個問題呢?我甚至沒有看到我的錯誤。

編輯:

感謝您的幫助! Kühl先生說,「iByteSizeActualData」錯誤。

+0

最終定義的參數uJoinFeeder在哪裏?是否有可能沒有初始化全局變量的值? –

+0

嘗試插入一個簡單的矢量到'uJoinFeeder.UnsignedChars'中,看它是否有效 – Kunal

+0

@Kunal哇,這是有效的。讓我檢查一下是什麼區別... – tmighty

回答

1

我猜想,iItemsCountiByteSizeActualData與後者大於iItemsCount不同的值。就個人而言,我將調用fread()作爲

if (fread(&nChars[0], nChars.size(), 1, m_infile) != nChars.size()) { 
    dealWithTheError(); 
} 

(當然,我不會把fread()而是stream.read()但這是另一回事)。

+0

@tmight:好的...... myJoinFeeder定義在哪裏?它是否在矢量被推到最後時被正確初始化? –

0

試試這個:

myJoinFeeder.UnsignedChars.push_back(std::vector<unsigned char>(std::begin(nChars), std::end(nChars)); 
+0

不會是'myJoinFeeder.UnsignedChars.insert(myJoinFeeder.UnsignedChars.end(),nChars.begin(),nChars.end())'更好嗎?我懷疑你的例子甚至會編譯。 – Marius

+0

@Marius:不,可能不是:用戶似乎想要插入一個向量序列,而不是將'char'序列轉換爲由'char'[可能爲負值]大小的向量序列。 –

+0

兩者都不起作用,但謝謝。發生相同的堆分配錯誤。 – tmighty