2013-05-30 8 views
3

Я пытался перебирать каталог, используя этот образец, который я нашел с быстрым поиском Google:подталкивания directory_iterator вызывает сбой

namespace bf = boost::filesystem; 
bf::path p("somedir"); 
bf::directory_iterator end_iter; 
for (bf::directory_iterator iter(p); iter != end_iter; ++iter) { 

} 

Однако при выполнении этого через терминал, конструктор по умолчанию вызывает следующее: testapp(6538) malloc: *** error for object 0x10fee9820: pointer being freed was not allocated. Дальнейшая отладка показала, что это происходит в конструкторе directory_iterator. Это случилось с кем-то еще? Если я запускаю это через NetBeans, все работает нормально.

Я использую OSX 10.8.3 и GCC 4.8

+0

Вы можете делиться сомером? Я думаю, что это должно быть что-то вроде boost :: filesystem :: path p ("c: \\ dir"); – MAG

+0

@MAG Я использую OSX, поэтому нет C: \\. Путь также относится к рабочему каталогу, и я включил проверку, чтобы увидеть, существует ли каталог. Каталог - это обычный каталог, содержащий кучу .txt-файлов. – Nik

+0

sry я пропустил это. Http://www.boost.org/doc/libs/1_47_0/libs/filesystem/v3/example/tut3.cpp может быть полезно, но странно, что у вас другое поведение с netbeans, которое может произойти, если у вас разные версии boost на вашей системе ... – MAG

ответ

1

Я побежал в этот точный вопрос. Для меня проблема закончилась тем, что библиотеки Boost были скомпилированы с другим компилятором C++, чем я использовал в своем проекте (clang для Boost и gcc для моих вещей). Я перекомпилировал Boost с GCC и успехом.

+0

Я уверен, что я скомпилировал все с помощью одного и того же компилятора. Я скомпилировал boost, используя MacPorts (который использует GCC, насколько мне известно) и GCC для моего проекта. – Nik

+0

MacPorts будет использовать системный компилятор (который, вероятно, clang). MacPorts специально будет ** не ** использовать gcc по умолчанию, ср. [Https://trac.macports.org/wiki/UsingTheRightCompiler]. Поэтому, если вы не предприняли шаги, чтобы сделать gcc по умолчанию, MacPorts не использует gcc для создания boost. С этой ссылкой вы можете поручить MacPorts построить пакет с gcc следующим образом: port install boost configure.compiler = macports-gcc-4.8 – agentplaid

+0

Я установил свой компилятор MacPorts по умолчанию в gcc48 – Nik