我明白了
变量“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 源代码位于此处!
否则代码会打印出正确的值。
我是 c/c++ 的初学者/中级,所以请你帮我理解 idStack 的工作原理以及我做错了什么。
我尝试使用 idStack(type, next) 宏创建堆栈对象 - 据我了解,您应该将 product 的元素之一放入“next”参数,以便计算偏移量。尽管我没有收到任何堆栈损坏错误但变量没有正确打印出来,但它从未正常工作(无论是重量还是价格)。
我还在 Doom 3 源代码中看到了一些使用内存池动态分配的代码,这可以解释这一点,但我看不到这里使用了这种技术......
编辑:我觉得我应该使用自定义分配器在堆 (3*sizeof(a)) 上分配足够的内存,然后在新分配的内存的开头初始化 a 。我是否朝着正确的方向倾斜?