- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个程序来模拟缓存。我使用 QVector 作为结构。我有一个 QVector 的 QVectors of ints。但是,当我尝试编辑整数时,会导致运行时错误:
*** 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
这是正在运行的鳕鱼:主要:
#include <fstream>
#include <QStringList>
#include <iostream>
#include <QFile>
#include <QTextStream>
#include <QDebug>
#include <cstdlib>
#include <string>
#include "cache.h"
using namespace std;
int main()
{
QFile instFile;
instFile.setFileName("test.trace");
int cacheSizes[4] = {1024, 4096, 16384, 65536};
int blockSizes[4] = {8, 16, 32, 64};
QString types[4] = {"DM", "2W", "4W" , "FA"};
if(!instFile.open(QIODevice::ReadOnly))
{
return -1;
}
QTextStream in(&instFile);
QStringList instList;
while(!in.atEnd())
{
QString temp;
temp = in.readLine();
instList.append(temp);
}
for(int i = 0; i < instList.size(); i++)
{
cout << instList.at(i).toStdString() << "\n";
}
for(int i = 0; i < 4; i++)
{
for(int j = 0; j < 4; j++)
{
for(int k = 0; k < 4; k++)
{
Cache c(cacheSizes[i], blockSizes[j], types[k], instList);
c.simulateCache();
}
}
}
return 0;
}
这是我有 QVectors 的模拟函数:
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
的简单示例。您可能还想查看此链接:
http://www.qtcentre.org/threads/49026-2D-array-in-Qt-QVector-or-QList
此外,您可能还想在代码中添加一些 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];
}
}
希望对您有所帮助。
编辑:这是另一个要检查的示例:
关于c++ - 如何编辑 Qvector 中 Qvector 的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16450071/
如何解决以下问题,即转换 const QVector>至 QVector> ? 我尝试了一些步骤但没有帮助: QVector> points = const_cast>>(abc.points); a
我想知道 QVector> 对象中的元素总数,说 myobject .一种方法是设置一个 for 循环,如下所示: int siz; QVector temp; for(int i=0; i> 的大小
我正在编写一个程序来模拟缓存。我使用 QVector 作为结构。我有一个 QVector 的 QVectors of ints。但是,当我尝试编辑整数时,会导致运行时错误: *** glibc det
我已经声明过: //myclass.h QVector aux; QVector > tests; //myclass.cpp aux = (QVector(2)); 它工作正常,但现在我想将每个 t
我是 C++ 编程的新手,所以我可能只是遗漏了一些东西,但我已经尝试解决这个问题将近一个小时了。 我有一套 QLabels在我的 UI我想每秒更新两次。它更新的数据存储在 QVector 中尺寸为 1
我在 QT 中有以下变量: QVector > buff_d1; 我需要修改“内部” vector : buff_d1.at(i).removeFirst(); buff_d1.at(i).push_
我真的尝试了所有方法,但找不到解决方案,我尝试先初始化外部 QVector,然后初始化内部,但没有成功。 最佳答案 QVector *matrix (as class member) with new
谁能给我一个使用以下构造函数 int Qt 的例子? QVector::QVector(std::initializer_list args); 最佳答案 采用 std::initializer_li
为了完成这项工作,我真的尝试结合我所知道的一切。相信目前的结构不会出现死锁或其他线程问题。然而,有些部分丢失了,可用的文档对我没有帮助(我没有使用 C++ 文档的经验)。 int main() {
我试图将 100 000 个 QString 元素(每个 QString 中大约有 10 个字符)附加到 QVector。之后程序失败。 QVector 可以包含多少个元素是否有一些限制(当然除了物理
我有一个 QVector对于一个结构体,结构体包含许多属性,有些是 int,有些是指向类的指针。和每个 TheCore将绑定(bind)到 QTabWidget 中的选项卡. struct TheCo
如何制作动态数量的小部件的 QVector(或其他一些容器类),例如 QPushButton 或 QComboBox Qt 4? 我在窗口类的构造函数中使用了以下内容: QVector foo; //
这个问题在这里已经有了答案: How does the Comma Operator work (9 个回答) 关闭 6 年前。 我正在尝试分配 QVector 的一部分Qt 中的 double 组
我遇到了问题。 出于某种原因,尽管我在 QString 中有一个值,但对 QVector 执行 append() 不起作用,我最终仍然只有一个空 vector 。 QList listServ
假设我有一个 QVector 存储这些元素:{3, 4, 1, 5, 6}。所以如果我从不同的线程读取每个元素,这会导致错误共享吗? (“读取”的意思是这样的:int i = vector[0];//
我正在尝试创建一个多维数组(C++ 数组类)的 QVector,但我遇到了麻烦 我有一个“节点”类,我想将多维数组的 QVector 作为节点类构造的参数传递,但这不起作用,我遇到了编译错误! Cla
所以我正在尝试创建一个简单的程序,允许我使用随机函数来操纵 vector ,但我觉得我忘记了一些相当重要和基本的东西请随时查看我发布的代码,让我知道解决方案是什么。我收到的错误是 myvec 是“索引
Qt 容器在被多线程使用时作为只读是安全的。但是写访问呢?我可以调整 QVector 的大小并在不同的线程中使用 operator[] 进行写入吗? QVector 的大小将保持不变,每个线程将写入不
我正在尝试将 QVector 与名为 RoutineItem 的自定义对象一起使用。 但是报错: C:\Qt\5.2.1\mingw48_32\include\QtCore\qvector.h:265
我可以看到类被视为调用默认构造函数所需的复杂对象: void QVector::defaultConstruct(T *from, T *to) { if (QTypeInfo::isComp
我是一名优秀的程序员,十分优秀!