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

jja*_*IAB 4 operating-system visual-studio-2010 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);
Run Code Online (Sandbox Code Playgroud)

并消失在以太.

有什么猜测我错过了什么?

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

Joh*_*ica 6

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

  • @George:不过,谢谢你的耐心等待.操作系统开发是一种非常简单的交易,至少直到你能够实际调试它为止.你帮助缩小了问题的范围.谢谢!:-) (2认同)

Geo*_*rge 5

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

std::vector<mySimpleStruct> v;
Run Code Online (Sandbox Code Playgroud)

代替

std::vector<int> v;
Run Code Online (Sandbox Code Playgroud)

似乎工作正常.这必然意味着问题在于标准模板库中std :: vector的某些函数的特化.我假设您已熟悉模板专业化,但如果您不熟悉:

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

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