我正在使用visual studio 2010中的grub-bootable C ++内核。
我已经达到了新的和删除写入的地步,以及动态分配的数组等工作。例如,我可以使用STL列表。在我写了一个memcpy例程后,我甚至可以对它们进行排序。问题是当我使用std :: vector类型时。简单地构造向量将内核发送到la la land。
显然我错过了某种功能实现,但是我查看了STL搜索它并空手而归。它在push_back失败了:
vector<int> v;
v.push_back(1);
然后消失在以太中。
我猜错了什么?
编辑是的它是int的向量。对困惑感到抱歉。不仅如此,它不是它失败的构造函数,它是对push_back的调用。
答案 0 :(得分:6)
在黑暗中刺:你是否实施了new[]
和delete[]
?列表将使用new
一次创建一个项目,而向量可能会使用new[]
分配更大的内存块。
答案 1 :(得分:5)
根据我们上面的讨论,创建一个
std::vector<mySimpleStruct> v;
而不是
std::vector<int> v;
似乎工作正常。这必然意味着问题在于标准模板库中std :: vector的某些函数的特化。我假设您已熟悉模板专业化,但如果您不熟悉:
http://www.parashift.com/c++-faq-lite/templates.html#faq-35.7
此外,一旦你弄清楚真正的问题在哪里,你能回来发布答案吗?你让我对现在真正的问题在哪里感到好奇,加上答案可能对试图构建自己的操作系统内核的其他人有所帮助。
答案 2 :(得分:1)
您使用自定义分配器还是默认分配器?
您可以尝试使用自定义的,只是为了查看哪些分配矢量可能会破坏您的内存管理器实现(这可能实际上是失败的)。
是的,一旦你解决它,请回复 - 它可以帮助所有其他OSdevers。