- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在用 C++ 创建点网格并将它们添加到 map 中,其中指向点的指针是值,点的 ID 是键。但是,指针似乎覆盖了某处。
//At first, create them like an array
HPoint** points = new HPoint*[x_values.size() * y_values.size()];
//First x, then y
int y_count = y_values.size();
for(int x_index = 0; x_index < x_values.size(); x_index++) {
for(int y_index = 0; y_index < y_values.size(); y_index++) {
HPoint* newPoint = new HPoint();
newPoint->setX(x_values[x_index]);
newPoint->setY(y_values[y_index]);
allPoints.insert(std::pair<int, HPoint*>(newPoint->getId(), newPoint));
//This is the check within the loop
refreshSegments();
//Also insert into a grid, for better access
points[x_index + y_count * y_index] = newPoint;
//Assign connection
if(y_index > 0) {
HPoint* otherPoint = points[x_index + y_count * (y_index-1)];
Segment* newSegment = new Segment(otherPoint, newPoint);
allSegments.push_back(newSegment);
}
if(x_index > 0) {
HPoint* otherPoint = points[x_index -1 + y_count * y_index];
Segment* newSegment = new Segment(otherPoint, newPoint);
allSegments.push_back(newSegment);
}
}
}
std::cout << "Out of the loop!: " << allPoints.size() << std::endl;
refreshSegments();
我使用 refreshSegments() 函数来检查是否有一些 ID 超出范围:
void MeshGeneration::refreshSegments()
{
//refresh points too
for(std::map<int, HPoint*>::iterator it = allPoints.begin(); it!=allPoints.end();) {
std::cout << it->second << " " << it->second->getId() << std::endl;
if(it->second->getId() > it->second->getCounter() || it->second->getId() < 0) {
std::stringstream ss;
ss << "Unexpected Id: " << it->second->getId() << " " << it->second;
throw std::runtime_error(ss.str());
}
++it;
}
}
map 实际上是一个对象成员,看起来像这样:
std::map<int, HPoint*> allPoints;
输出看起来像这样。很明显,当从循环内调用检查时,指针 0xc61138 没问题,但当从循环外调用时,指针 0xc61138 就不行了。
0xc61138 0
0xc61188 1
0xc61240 2
0xc61348 3
0xc61438 4
0xc61500 5
0xc61620 6
0xc63030 7
0xc63118 8
0xc63200 9
0xc63388 10
0xc634e8 11
0xc63648 12
0xc63778 13
0xc63928 14
0xc63a60 15
0xc63b98 16
0xc63c60 17
0xc63d70 18
0xc63ea8 19
0xc63fe8 20
0xc64120 21
0xc63868 22
0xc64428 23
0xc64588 24
0xc64678 25
0xc64788 26
0xc648c0 27
0xc649f8 28
0xc64b30 29
0xc64c68 30
0xc64da0 31
0xc64f00 32
0xc64ff0 33
0xc65100 34
0xc65238 35
0xc65370 36
0xc654a8 37
0xc655e0 38
0xc64258 39
0xc65978 40
0xc65a68 41
0xc65b78 42
0xc65cb0 43
0xc65de8 44
0xc65f20 45
0xc66058 46
0xc66190 47
0xc662f0 48
0xc663e0 49
0xc664f0 50
0xc66628 51
0xc66760 52
0xc66898 53
0xc669d0 54
0xc66b08 55
Out of the loop!: 56
0xc61138 13003528
我真的很困惑,因为这实际上有时有效,有时无效,具体取决于我创建的点数。
谢谢!
最佳答案
您的 x 和 y 尺寸是否相同?否则,您可能会遇到索引映射被破坏的麻烦,通常它是 x + y * x_size,而不是 y。
关于C++ 分配的指针显示意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17436657/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为
当我尝试在 db2 中创建表时,它抛出以下错误 $ db2 CREATE TABLE employee(emp_id INT NOT NULL, emp_name VARCHAR(100)) sh:
我有: while (i < l) { if (one === two) { continue; } i++; } 但是 JSLint 说: Problem at line 1 chara
所以我有这个代码: char inputs[10] = ""; int numInputs = 0; while (numInputs < 10){ char c; printf("E
var ninja = { name: 'Ninja', say: function () { return 'I am a ' + this.name; }
我收到一个我不明白的错误,请注意,我是编码新手,所以这可能是一个简单的错误。 #include using namespace std; int main() { //Initialise Fahr
我正在使用 javascript 和 react,由于某种原因,我收到了一个奇怪的 token 错误。 这是发生错误的代码: renderNavBar() { if (!this.us
Closed. This question is off-topic。它当前不接受答案。
由于某种我无法解释的原因,编译器正在输出一个错误,指出它发现了一个意外的#else 标记。 这发生在文件的开头: #if defined( _USING_MFC ) #include "stda
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
这个问题在这里已经有了答案: Difference between sh and Bash (11 个答案) 关闭 2 年前。 我正在编写一个简单的 bash 脚本,我在 XX `(' unexpe
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 此问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-topic
我在 Windows 7 上编写了一个脚本,它不断给我一个错误“(此时出乎意料。”对于以下代码 if %vardns%=="NODNS" ( netsh interface ipv4 set ad
我正在尝试使用xmlstarlet(使用xpath)解析XML文件,但是出现语法错误,并且我不知道如何更正我的代码。 这是我的脚本: #!/bin/bash if [ $1=="author" ];
以下脚本旨在在目录中的所有文件上运行程序“senna”,并将每个文件的输出(保留输入文件名)写入另一个目录 for file in ./Data/in/*; do ./senna -iobta
我从 challengers.coffee 运行此代码,并收到错误 ActionView::Template::Error (SyntaxError: [stdin]:3:31:unexpected
我在 config.db.database; 行中有语法错误(意外的标记“.”)。这是我在文件中的代码 const config = require('../config/config') const
这一定很明显,但是我无法使它正常工作。我正在尝试传输应该用于构建$ classKey的对象,这反过来又导致删除所需的软件(amd64或i386)。好吧,这里的代码: $name = @("softwa
我正在使用 1.3.7 版学习 Grails,但我一直无缘无故地遇到以下语法错误: unexpected token: mapping @ line x, column y. 有一次,我通过运行“gr
我正在尝试找出这段Pascal代码的问题 function Factorial(n: integer): integer; begin if n = 0 then Result := 1
我是一名优秀的程序员,十分优秀!