> В этом то вся загвоздка, расширения php это динамические либы, я не представляю как их дебажить.
Да ладно, какая это загвоздка? Запускайте php в gdb, ставьте точку останова по имени функции. Ну или делайте fprintf в лог-файл, если с gdb сложно/неудобно. Или OutputDebugString, если у вас венда.
> наверное basic_string вызывает ещё что-то
Ему там больше нечего вызывать.
Я посмотрел внимательно на вашу реализацию, и могу сказать следующее:
1. тип вашей функции allocate не соответствует прототипу, ожидаемому в аллокаторе: вторым аргументом должен идти allocator::const_pointer. Вообще использование названий типов из документации, вместо попыток их угадать/подобрать, может вас избавить от массы сюрпризов.
2. deallocate принимает два параметра, а не один. Вы это поменяли?
3. class string : public std::basic_string -- я не понял, вы свою строчку унаследовали что ли? Простого typedef недостаточно?
4. если у вас есть сомнения в том, вызываются ли ваши функции из реализации аллокатора, вставьте в них fprintf или что-нибудь подобное.
> из-за особенностей представления дробных чисел в двоичной системе
В любой системе исчисления в конечном виде можно представить только те дроби, знаменатель которых состоит из простых множителей, входящих в разложение на множители основания системы исчисления. Т.е., например пятые доли, конечные в десятичной системе в двоичной -- бесконечные.
> спасибо за разъяснение
отметьте ответ как решение (:
Вы невнимательны. Во-первых в моём ответе нет никакой второй скобки. Проблема в умножении точного значения 100.0 на приближенное 0.2. Во вторых, 20.0dec = 10100.0bin
Это зависит от того, что именно сломалось и что есть в вашем распоряжении. Может быть вы приведёте какие-нибудь логи/сообщения/словесное описание, более подробное чем "появляется черный экран с кучей ошибок"?
> Читает лишь значение inode, никак не содержимое в памяти @vvpoloskin прости, что?
Cимвольная ссылка -- это путь к файлу, readlink этот путь читает. Чем это не "прочитать ссылку"?