C++ 测试Doom 3堆栈实现时堆栈损坏

C++ 测试Doom 3堆栈实现时堆栈损坏,c++,memory,stack,allocation,C++,Memory,Stack,Allocation,我明白了 变量“a”周围的堆栈已损坏 在试用此代码时: #include "Stack.h" #include <iostream> struct product { int weight; float price; } ; void main(void){ product a = {1, 4.0f}; product b = {2, 5.0f}; produc

我明白了

变量“a”周围的堆栈已损坏

在试用此代码时:

    #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”
#包括
结构产品{
整数权重;
浮动价格;
} ;
真空总管(真空){
乘积a={1,4.0f};
乘积b={2,5.0f};
乘积c={3,6.0f};
模板栈;
堆栈。添加(&a);
堆栈。添加(&b);
堆栈。添加(&c);
产品*第一、*第二、*第三;
第三个=stack.Get();
second=stack.Get();
first=stack.Get();

std::cout price此堆栈实现是侵入性的-它希望堆栈模板可以使用一个指针。在这种情况下,第二个模板参数旨在具有指向该指针的偏移量,而不是要存储的对象的大小

因此,您可以进行以下修改:

struct product {
    int weight;
    float price;
    struct product* next;   // <-- link pointer field
} ;


// the stack declaration:

idStackTemplate<product, offsetof(struct product, next)> stack;
//                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
struct产品{
整数权重;
浮动价格;

struct product*next;//此堆栈实现是侵入性的-它希望堆栈模板可以使用一个指针。在这种情况下,第二个模板参数旨在具有指向该指针的偏移量,而不是要存储的对象的大小

因此,您可以进行以下修改:

struct product {
    int weight;
    float price;
    struct product* next;   // <-- link pointer field
} ;


// the stack declaration:

idStackTemplate<product, offsetof(struct product, next)> stack;
//                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
struct产品{
整数权重;
浮动价格;

Stutt**下一个;//你需要使用DOOM 3实现吗?C++标准库有一个容器。我想理解代码作为我学习C++的一部分。我已经用java和Python实现了多个容器,这些容器是我的主要语言,我发现它是学习新语言的好实践。一些常见的算法和容器。很酷,抱歉,我没有这个末日3的答案。祝你好运!你需要使用末日3实现吗?C++标准库有一个容器。我想理解代码作为我学习C++的一部分。我已经用java和Python实现了多个容器,它们是我的主要L。anguages和我发现学习新语言的好方法是实现一些常见的算法和容器。这很酷,很抱歉我没有关于Doom 3问题的答案。祝你好运!所以堆栈本身不是真正的堆分配,但对象本身可以?放在堆栈上的对象可以以任何方式分配,但它们不能此外,对象一次只能在一个堆栈上(更准确地说,一个特定的链接指针成员一次只能由一个堆栈对象使用)。因此堆栈本身不是真正的堆分配,但对象本身可以?放在堆栈上的对象可以以任何方式分配,但它们在堆栈上时不得被销毁。此外,对象一次只能在一个堆栈上(更准确地说,一个特定的链接指针成员一次只能由一个堆栈对象使用)。