C++ 如何编辑Qvector中Qvector的内容

C++ 如何编辑Qvector中Qvector的内容,c++,qt,vector,C++,Qt,Vector,我正在写一个程序来模拟缓存。我用一个QVector作为结构。我有一个整数的向量。但是,当我尝试编辑整数时,会导致运行时错误: *** glibc detected *** ./CompOrgProject3: free(): invalid next size (fast): 0x00000000010d2550 *** ======= Backtrace: ========= /lib/x86_64-linux-gnu/libc.so.6(+0x7eb96)[0x7fd31b469b96] .

我正在写一个程序来模拟缓存。我用一个QVector作为结构。我有一个整数的向量。但是,当我尝试编辑整数时,会导致运行时错误:

*** glibc detected *** ./CompOrgProject3: free(): invalid next size (fast): 0x00000000010d2550 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x7eb96)[0x7fd31b469b96]
./CompOrgProject3[0x402558]
./CompOrgProject3[0x402bf3]
./CompOrgProject3[0x402005]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed)[0x7fd31b40c76d]
./CompOrgProject3[0x4023c1]
======= Memory map: ========
00400000-00405000 r-xp 00000000 08:01 404625                             /home/**/Documents/CompOrgProject3/CompOrgProject3
00604000-00605000 r--p 00004000 08:01 404625                             /home/**/Documents/CompOrgProject3/CompOrgProject3
00605000-00606000 rw-p 00005000 08:01 404625                             /home/**/Documents/CompOrgProject3/CompOrgProject3
010cb000-010ec000 rw-p 00000000 00:00 0     
以下是正在运行的cod: 主要内容:


下面是一个使用嵌套的
QVector
的简单示例。您可能还想查看此链接:

此外,您可能还希望在代码中加入一些
qDebug
语句,以查看您是否拥有您认为的那么多元素

QVector < QVector < int > > matrix;

matrix.resize(10);
for(int i = 0; i< matrix.size(); i++)
{
    // Note that you can't use foreach here!
    matrix[i].resize(10);
}

// Sanity check:
qDebug() << matrix.size() << matrix.at(0).size();

for(int r = 0; r < matrix.size(); r++)
{
    for(int c = 0; c < matrix.at(r).size(); c++)
    {
        matrix[r][c] = 10;
        // qDebug() << matrix[r][c];
    }
}
QVector>矩阵;
矩阵。调整大小(10);
对于(int i=0;iqDebug()乍一看,我猜其中一个索引超出范围。在函数开始时,我调整了qvectors的大小,以适应所有可能的索引。或者这不起作用?尝试将valgrind与gdb一起使用:sudo valgrind--attach db=yes./CompOrgProject3,这将允许您在出现内存错误时进行调试
void Cache::simulateCache()
{

    if(this->instList.size() < 1)
    {
        screenOut << "Cannot simulate cache: there are no instructions";
    }
    else
    {
        screenOut << "Starting simulation...\n";
        int entry_per_block = block_size / 4;
        block_count = cache_size / block_size;
        QVector<QVector<int> > ca(block_count);
        for(int i = 0; i < block_count; i++)
        {
            ca[i].resize(entry_per_block);
        }
        screenOut << "QVector created.\n";

        for(int i = 0; i < this->instList.size(); i++)
        {
            QStringList inst_parts = instList.at(i).split(QRegExp(" "));
            QString instType = inst_parts.at(0);
            int mem_addr = inst_parts.at(1).toInt(0, 16);

            if(this->type.compare("DM") == 0)
            {
                int block_index = (int) (mem_addr / block_size) % block_count;
                int block_offset = mem_addr % block_size;

                if(ca.at(block_index).at(block_offset) == mem_addr)
                {
                    this->hits++;
                    if(instType.compare("W") == 0)
                    {
                        this->cacheToMem+=block_size;
                    }
                }
                else
                {
                    this->misses++;
                    this->memToCache += block_size;
                    ca[block_index][block_offset] = mem_addr;

                    if(instType.compare("W") == 0)
                    {
                        this->cacheToMem+=block_size;
                    }
                    for(int i = block_offset - 1; i >= 0; i--)
                    {
                 //ca[block_index][i] = mem_addr - ((block_offset - i) * 4);
                        //ca[block_index].insert(i, mem_addr - ((block_offset - i) * 4) );
                    }
                    for(int i = block_offset + 1; i < entry_per_block; i++)
                    {
                 //ca[block_index][i] = mem_addr + ((i - block_offset) * 4));
                        //ca[block_index].insert(i, mem_addr + ((i - block_offset) * 4));
                    }
                }

            }

        }

        hit_rate = hits / instList.size();
        screenOut << hit_rate << "\n";
    }
}
ca[block_index][block_offset] = mem_addr;
QVector < QVector < int > > matrix;

matrix.resize(10);
for(int i = 0; i< matrix.size(); i++)
{
    // Note that you can't use foreach here!
    matrix[i].resize(10);
}

// Sanity check:
qDebug() << matrix.size() << matrix.at(0).size();

for(int r = 0; r < matrix.size(); r++)
{
    for(int c = 0; c < matrix.at(r).size(); c++)
    {
        matrix[r][c] = 10;
        // qDebug() << matrix[r][c];
    }
}