2012-07-03 3 views
2

У меня возникает странная ошибка при инициализации моего детекса или вектора. Я использую QtCreator и CMake-Project.Инициализация вектора и дека или push_back вызывает ошибку SIGABRT

Если я использую Deque, она ликвидирует инициализации:

std::deque<int> myValues; // <-- abort here 

for (int i=0;i<10;++i) 
{ 
    myValues.push_back(i); 
} 

, когда я использую Deque, она ликвидирует на push_back:

std::vector<int> myValues; 

for (int i=0;i<10;++i) 
{ 
    myValues.push_back(i); // <-- abort here 
} 

я не могу выяснить, почему это происходит сейчас (он работал так все время). Оба прерывания происходят внутри _gnu_cxx :: new_allocator < int> :: allocate.

Любые подсказки?

Спасибо за внимание!

Хартмут

+0

Что-то кажется рыбным с распределением памяти. Работает ли 'malloc' /' free', или они также поднимают SIGABRT? Я предполагаю, что внутренняя бухгалтерия в glibc, выполняемая этими функциями, испорчена. Попробуйте запустить Valgrind в своем приложении, возможно, он может пролить некоторый свет. –

+0

Вы должны вызывать некоторое неопределенное поведение где-то еще в программе. Проверьте, выполняете ли вы такие вещи, как доступ к ячейкам памяти за пределами границ. – juanchopanza

ответ

1

Это выглядит как коррупция кучи в каком-то другом месте в вашей программе. То есть вы пишете вне границ или где-то удаляете недопустимый указатель. Как только внутренняя структура кучи повреждена, значительные выделения могут привести к сбою вашей программы.

+0

спасибо. После раскола некоторых других функций (которые не вызывали ошибок) пространства имен, оно прошло. – hardmooth

+0

@hartmooth Хорошо, эти функции вызывали ошибки (а именно кучевое повреждение), они просто не вызывали очевидных и простых исправлений ошибок. – sashoalm

Смежные вопросы