自定义OS上的STL - std :: list可以工作,但std :: vector不能

时间:2010-08-18 01:17:32

标签: visual-studio-2010 operating-system stdvector visual-c++-2010

我正在使用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的调用。

3 个答案:

答案 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。