Я нашел эту статью очень проницательной:
http://addyosmani.com/blog/taming-the-unicorn-easing-javascript-memory-profiling-in-devtools/
Он широко раскрывает инструменты для разработчиков Chrome и очень хорошо объясняет, как это происходит, когда у вашего приложения возникают проблемы с памятью.
Вы не можете передать strcmp()
в качестве функции сравнения для bsearch()
. Эта функция должна принимать указатели на сравниваемые элементы (в этом случае указатель на указатель на строку, хотя фактический тип аргументов функций должен быть const void *
), тогда как strcmp()
ожидает указатель на строку , Существует дополнительный слой косвенности, который он не обрабатывает.
Вы не показываете эту функцию, но возможно использовать функцию cstring_cmp()
, которую вы используете с qsort()
.
Первым аргументом функции сравнения bsearch()
является указатель, указанный как ключ, второй аргумент - указатель на текущий элемент сравниваемого массива, где с функцией сравнения qsort()
оба аргумента являются указателями на элементы. Поэтому, если вы сделаете ключевой аргумент bsearch()
указателем на то, что вы ищете, оба будут работать с одной и той же функцией. Другими словами, bsearch(&key, ...)
хорош, bsearch(key, ...)
- нет. Вы также можете использовать функцию сравнения bsearch()
, которая будет работать с этим вторым случаем. См. https://stackoverflow.com/a/15824981/9952196 для примера.
qsort()
с массивом строк, да. Он также будет работать сbsearch()
, если элемент, который вы ищете, передается с использованием его адреса (мне нужно вернуться назад и переписать мой ответ, потому что я забыл это оговорку), напримерbsearch(&key, ...)
. – Shawn 14 July 2018 в 00:24