9a3*_*edi 5 c++ heap stack vector stack-corruption
我一直在研究一堆图像处理程序......没什么特别的,大多是快速和肮脏的实验.图像数据存储在堆栈中声明的向量中(当我不需要传递数据时,我尽量避免使用指针).我注意到,尽管进行了无数的调试和步进,我的一些功能仍然表现得非常奇怪.有时调试器会给我一个错误,它无法评估某个变量等等.事情通常没有意义,过去的经验告诉我,当这发生时,这意味着存在某种溢出或内存损坏.首先想到的是,这可能是由于我将大量图像数据存储到矢量中.
但是,我的印象是向量将它们的实际数据存储在堆中,所以我认为在堆栈中有一些这样的大向量不会有什么坏处.这是错误的吗?我应该分配我的向量并将它们存储在堆而不是堆栈中吗?
谢谢,
[...]向量将实际数据存储在堆中
vector与所有其他容器一样,它使用分配器对象进行内存管理.通常,如果未指定任何内容作为模板的第二个参数,则使用默认分配器 - std::allocatorfrom <memory>- .分配器负责保留内存.可以从免费商店或堆栈中免费使用.
大多数实现通常使用pimpl习语并在vector对象内存储指向免费存储上的实际内存的指针.
我注意到,尽管进行了无数的调试和步进,我的一些功能仍然表现得非常奇怪
您可能想要检查您是否vector正确使用了s.查找标准,了解每个成员函数的保证,包含类型必须满足的条件以及迭代器失效时的条件.这应该是一个好的开始.