Как я могу определить, виден ли searchResultsTableView для UISearchDisplayController?

Объявление двух переменных, называемых a, безусловно, является ошибкой; если ваш компилятор соглашается с этим, тогда он сломан. Я предполагаю, что вы имеете в виду, что вы по-прежнему не получаете ошибку, если вы замените одно объявление другим.

Доступ к массиву не проверен диапазоном. Во время компиляции размер массива часто неизвестен, и язык не требует проверки даже тогда, когда он есть. Во время выполнения проверка снизит производительность, что противоречит философии C ++, которая не платит за то, что вам не нужно. Таким образом, доступ за пределами массива дает неопределенное поведение, и программист должен убедиться, что этого не происходит.

Иногда недопустимый доступ вызывает ошибку сегментации, но это не гарантируется , Как правило, защита памяти применяется только к целым страницам памяти с типичным размером страницы в несколько килобайт. Любой доступ на странице действительной памяти не будет обнаружен. Существует хорошая вероятность, что доступная вам память содержит какую-либо другую программную переменную или часть стека вызовов, поэтому запись может повлиять на поведение программы практически так, как вы можете себе представить.

Если вы хотите быть безопасным, вы можете использовать std::vector и получать доступ только к его элементам, используя функцию at(). Это проверит индекс и выдаст исключение, если оно выходит за пределы допустимого диапазона. Он также будет управлять распределением памяти для вас, исправляя утечку памяти в вашем примере.

13
задан Sheehan Alam 11 August 2011 в 23:46
поделиться