- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我明白了
Stack around the variable 'a' was corrupted.
在尝试这段代码时:
#include "Stack.h"
#include <iostream>
struct product {
int weight;
float price;
} ;
void main(void){
product a = {1, 4.0f};
product b = {2, 5.0f};
product c = {3, 6.0f};
idStackTemplate<product, sizeof(product)> stack;
stack.Add(&a);
stack.Add(&b);
stack.Add(&c);
product * first, * second, *third;
third = stack.Get();
second = stack.Get();
first = stack.Get();
std::cout << first->price << "\t" << first->weight << "\n";
std::cout << second->price << "\t" << second->weight << "\n";
std::cout << third->price << "\t" << third->weight << "\n";
}
Stack.h 源代码位于here !
否则代码会打印出正确的值。
我是 c/c++ 的初级/中级,所以请您帮助我了解 idStack 的工作原理以及我做错了什么。
我已经尝试使用 idStack(type, next) 宏创建堆栈对象 - 根据我的理解,您应该为“下一个”参数放置一个产品元素,以便它计算偏移量。尽管我没有收到任何堆栈损坏错误,但它从未正确工作(无论是重量还是价格),但变量没有正确打印出来。
我还在 Doom 3 源代码中看到了一些使用内存池动态分配的代码,这可以解释这一点,但我看不到这里使用了这种技术......
编辑:我觉得我应该使用自定义分配器在堆 (3*sizeof(a)) 上分配足够的内存,然后在新分配的内存的开头初始化 a。我的方向是否正确?
最佳答案
这个堆栈实现是侵入式的——它期望有一个指针可供堆栈模板使用。在这种情况下,第二个模板参数旨在具有该指针的偏移量 - 而不是所存储对象的大小。
因此您可以进行以下修改:
struct product {
int weight;
float price;
struct product* next; // <-- link pointer field
} ;
// the stack declaration:
idStackTemplate<product, offsetof(struct product, next)> stack;
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
不用说,这种容器通常不被认为是好的做法。
关于c++ - 测试 Doom 3 Stack 实现时堆栈损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18901530/
我真的是一个初学者,不明白很多这些东西是如何工作的。我刚刚安装了 doom emacs,我以前从未使用过 emacs。我运行了 doom doctor 命令,它给了我两个警告。 > Checking
我很难理解 Chocolate Doom 如何分配其余弦表。评论解释说它在正弦表上进行 PI/2 移位以计算余弦表,但我不明白它是如何使用 C 完成的。 这是 Chocolate Doom 在 tab
我知道您可以使用组合键 SPC + t + l 切换行号但是在重新启动 Doom Emacs 时它会变回绝对行号。如何配置 Doom Emacs 以在每次启动 emacs 时设置相对行号? 最佳答案
(注意:在此问题的末尾提供了一个最小,完整和可验证的示例) 摘要 背景,目标与问题 我对作者的解释和出处的理解(可能是错误的?)-请注意:我必须向您解释,因为我的错误可能来自对执行方法的错误理解或代表
我正在尝试绘制多个时间序列数据。我的代码基于此处接受的答案: Chart creating dynamically. in .net, c# 但是,我正在绘制多个时间序列数据的数据,这些数据可能来 s
我一直在寻找解决厄运金字塔的办法。到目前为止,我得出的结论如下: router.use('/create', function(res,req,next) { try { v
过去几周我一直在研究(旧)3D 渲染技术,并且认为我现在对 Doom 中 3D 渲染的工作方式有了相当的了解。 它使用光线转换来渲染 3D 场景,使用对象的 Sprite ,因此不是“真正的”3D。
我有几个口头表达,我已经打包成一个函数: open FsVerbalExpressions open FsVerbalExpressions.VerbalExpression open System.
我有一个烦人的多重继承厄运钻石,带有复杂的扭曲(我们正在谈论 MS COM 对象,稍后将详细介绍)- 假设有一个抽象类(接口(interface))A,它有一些纯虚方法。 另一个抽象类(另一个接口(i
我明白了 Stack around the variable 'a' was corrupted. 在尝试这段代码时: #include "Stack.h" #include
当使用Comet或Ajax Long Pull技术时-通常使用iframe。在该iframe等待长连接关闭的同时,浏览器正在旋转它的启动器(进度/加载指示器)。 一些网站,例如etherpad.com
我有一个 div,它在 a 点击时 popedUp。我的问题非常奇怪,请查看下面的代码片段: HTML Some Text JQ $('a.highlightP
在毁灭战士3的源代码中,使用了ID_INLINE宏来代替内联,声明为#define ID_INLINE inline。有什么理由使用这个宏而不是简单的内联? 最佳答案 出于同样的原因,许多其他软件包使
有没有比嵌套的 if let 语句更好的处理可选属性链的方法?我被建议在检查可选属性时使用 if lets,这是有道理的,因为它在编译时而不是运行时处理它们,但它看起来完全疯狂!有没有更好的办法? 这
当我从提取的源代码树中的 neo 文件夹运行 scons 命令时,我得到以下输出: nroach44@ASUS-P5G43T-U1110:~/Source/doom3engine/neo$ scons
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 1年前关闭。 社区在 4 个月前审查了是否重
我在 google colab 上使用 vizdoom 1.1.7。 为了创建环境,我使用 basic.cfg 文件。 但是 Colab 笔记本给了我一个 FileDoesNotExistExcept
我正在学习需要安装 ppaquette-gym-doom 的教程。但是我不断收到错误, ERROR: Failed building wheel for doom-py 我在 MacBook 上使用
我正在尝试编译新发布的毁灭战士 3 源代码,但出现错误: scons: *** [build/debug/core/sys/scons/doom] Source `/usr/lib/libz.a'
(这个问题类似于 this one ,但它是针对使用 XMLHttpRequest 而不是 Comet 的 iframe。) 我正在开始这样的异步长轮询: var xhr = new XMLHttpR
我是一名优秀的程序员,十分优秀!