C++将值添加到一种矩阵

标签 c++ visual-studio-2010 vector crash

我有以下类(class):

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

现在我想向类中添加一个无符号字符 vector 。 我试着这样做:

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
}

它编译正常,但在运行时它崩溃并在行中出现堆分配错误:

uJoinFeeder.UnsignedChars.push_back(nChars);

我该怎么做才能解决这个问题?我什至看不出我的错误。

编辑:

感谢您的帮助! 正如 Kühl 先生所说,“iByteSizeActualData”是错误的。

最佳答案

我猜测 iItemsCountiByteSizeActualData 具有不同的值,后者比 iItemsCount 大。就个人而言,我会将 fread() 调用为

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

(好吧,我不会调用 fread(),而是调用 stream.read(),但这是另一回事)。

关于C++将值添加到一种矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19670460/

相关文章:

c++ - 编译期间的 libtool 错误

c++ - 使用命名空间制作全局函数,但出现多次定义的符号错误

c# - 创建和运行测试

visual-studio-2010 - VS 2010 + IIS : Unable to start debugging on the web server.启动的URL的IIS工作进程当前未运行

c++ - 包含结构的 vector 的 vector

c++ - 声明指针变量的不同类型

c++ - 了解 memory_order_relaxed

code-signing - Visual Studio 2010 程序集签名 : An attempt was made to reference a token that does not exist

c++ - 段错误: 11 c++ when using vector

Java:多次将元素从 Hashmap 添加到 vector