我遇到了一個非常奇怪的錯誤,我希望有人能解釋。我有一個簡單std::vector<V3x>
,其中V3x
是一個三維矢量下面的代碼導致std::length_error
引發異常(線性代數的那種。):std :: vector堆棧幀之間的C++參數的值變化
std::vector<V3x> vertices;
int vertexCount = computeVertexCount();
vertices.resize(vertexCount); // throws std::length_error
我已驗證computeVertexCount()
返回35
一個值,該值遠遠低於vector::max_size()
,所以它沒有辦法要求太多的內存。
我將異常向下追溯到std::vector
的定義,以下兩個函數。
void resize(size_type _Newsize, _Ty _Val)
{ // determine new length, padding with _Val elements as needed
if (size() < _Newsize)
// NOTE: here, _Newsize - size() = 35
_Insert_n(end(), _Newsize - size(), _Val);
else if (_Newsize < size())
erase(begin() + _Newsize, end());
}
void _Insert_n(const_iterator _Where,
size_type _Count, const _Ty& _Val)
{ // insert _Count * _Val at _Where
// NOTE: here, _Count = 3435973836
...
}
所以當_Count
參數resize()
和_Insert_n()
之間傳遞,價值的變化,從35到3435973836.我假設的內存有時會損壞,但我不知道怎麼會是。
對於更多的情況下,如果它是問題的一部分,此代碼位於我從Softimage XSI加載的.dll插件中。
有誰知道什麼可能會導致這樣的事情發生?
編輯:解
nobugz,我可以吻你。
由於VS2008中的_HAS_ITERATOR_DEBUGGING
,std :: vector的大小在我的.dll文件中發生了變化。搜索使我someone with the same problem,它是由添加在我的項目的頂部以下固定:
// fix stack corruption errors caused by VS2008
#define _HAS_ITERATOR_DEBUGGING 0
#define _SECURE_SCL 0
是性病::矢量頂點;真的是一個局部變量?否則,它可能很好,因爲它尚未創建(因爲靜態初始化失敗) –
2009-01-11 17:52:08
是否vertices.resize(vertexCount);需要第二個參數? – 2009-01-11 19:48:57