我最近正在做一个项目,偶然发现以下情况
using namespace std;
//I have two structs, A basic struct as shown below
struct myAnotherStruct{
int x;
int y;
};
//A struct which embeds the stack of above struct type
struct myStruct{
int a;
float b;
stack <myAnotherStruct> s;
};
//Somewhere else in the code, I created this
stack <myStruct> t;
//And performed following
struct myAnotherStruct var;
var.x = 10;
var.y = 20;
// But, when I performed the following operation, there was a core Dump!
t.s.push(var)
现在,我的问题是,
为什么要进行核心转储?每次添加新元素时都不应分配内存吗? var应该被复制,变量的存储类(在我的情况下是var)应该没有关系!
做这样的事情好吗?因为当我谷歌搜索时,我总是得到“结构堆栈,结构向量”等,但不是这样(即堆栈结构)。
您正在创建myStruct
而不是myStruct
实例的堆栈。
//Somewhere else in the code, I created this
stack <myStruct> t;
您需要将其更改为:
myStruct t;
在原始代码中,由于stack
在此处没有成员s
,因此编译器应生成错误:
// But, when I performed the following operation, there was a core Dump!
t.s.push(var)
这里的问题是,您尝试访问堆栈中的元素而没有像这样将项目推入堆栈中:
myStruct m; // Creates new myStruct object
t.push(m); // Adds object to stack
此外,.
运算符不会自动获取堆栈中的顶部对象。如果要将var
添加到s
中的成员变量t
中,请考虑使用t.top().s.push(var);
获取堆栈的顶部元素,然后将car推入堆栈。