4

我只是在 Visual Studio 2010 中使用 grub 可引导的 C++ 内核。

我已经到了写新和删除的地步,并且动态分配的数组之类的东西可以工作。例如,我可以使用 STL 列表。在我编写了一个 memcpy 例程之后,我什至可以对它们进行排序。问题是当我使用 std::vector 类型时。只需构造向量即可将内核发送到 la la land。

显然我错过了某种功能实现,但我通过 STL 搜索它并空手而归。它在 push_back 失败:

vector<int> v;
v.push_back(1);

消失在以太中。

关于我缺少什么的任何猜测?

编辑是的,它是 int 的向量。对困惑感到抱歉。不仅如此,它失败的不是构造函数,而是对 push_back 的调用。

4

3 回答 3

6

暗中刺探:你有new[]delete[]实施了吗?列表将一次创建一个项目,new而向量可能会分配更大的内存块new[]

于 2010-08-18T01:24:31.430 回答
5

根据我们上面的讨论,创建一个

std::vector<mySimpleStruct> v;

代替

std::vector<int> v;

似乎工作正常。这一定意味着问题出在标准模板库中 std::vector 的某些函数的专门化中。我假设您已经熟悉模板专业化,但如果您不熟悉:

http://www.parashift.com/c++-faq-lite/templates.html#faq-35.7

另外,一旦你弄清楚真正的问题出在哪里,你能回来在这里发布答案吗?您让我对现在真正的问题在哪里感到好奇,而且答案可能对尝试构建自己的操作系统内核的其他人有所帮助。

于 2010-08-18T03:02:08.490 回答
1

您使用自定义分配器还是默认分配器?

您可能会尝试使用自定义的来查看哪些分配向量可能会破坏您的内存管理器的实现(这可能是实际失败的原因)。

是的,一旦你解决了它,请回帖 - 它可以帮助所有其他 OSdevers。

于 2010-08-30T22:07:46.143 回答