Предложен новый способ искать внеземные цивилизации. Чем он отличается?
Исследователь из Института астрофизики Канарских островов (IAC) предложил принципиально новый способ поиска внеземной жизни, ориентируясь на техносигнатуры. Рассказываем, что это такое, как инопланетный разум искали раньше, по какой причине ученые прекратили попытки и почему сейчас самое время возобновить поиски.
Читайте «Хайтек» в
Как искали внеземную жизнь раньше?
Начало проекта SETI датируется 1959 годом, когда в международном научном журнале Nature была опубликована статья Дж. Коккони и Ф. Мориссона «Поиски межзвёздных сообщений» В этой статье было показано (с анализом достижимой излучаемой мощности и чувствительности радиотелескопов), что даже при тогдашнем уровне развития радиоастрономии (1959 год) можно было рассчитывать на обнаружение внеземных цивилизаций примерно такого же технологического уровня, как земной, при условии, что они обитают на не слишком далёких от нас планетах, в планетных системах звёзд солнечного типа.
Новаторский подход к проблеме продемонстрировали астрономы из университета Калифорнии в Беркли: в 1999 г. они запустили в действие проект SETI@home. Идея — привлечь к работе миллионы владельцев персональных компьютеров, чьи машины большую часть времени просто бездействуют. Те, кто участвует в проекте, скачивают из Интернета и устанавливают на своем компьютере пакет программ, которые работают в режиме скринсейвера, а потому не доставляют владельцу никаких неудобств. Эти программы участвуют в расшифровке сигналов, принятых радиотелескопом.
Прект SETI@home считается беспрецедентным успехом в демонстрации возможности масштабных распределенных вычислений, и его влияние можно увидеть во всем, от многопользовательских видеоигр до криптовалютных проектов, таких как биткойн и Ethereum. Однако проект по использованию резервных вычислительных циклов для помощи поиску внеземного разума год назад приостановил деятельность после 20 лет работы.
Но по мере роста вычислительной мощности проект выдавал все больше данных. «Мы находимся на грани снижения доходности — объяснили организаторы в своем заявлении. — По сути, мы проанализировали все данные, которые нам нужны на данный момент. У нас много работы по управлению распределенной обработкой данных. Нам нужно сосредоточиться на завершении внутреннего анализа результатов, которые у нас уже есть, и написать об этом в статье научного журнала».
Развитие машинного обучения, которое требует огромных вычислительных мощностей, может дать этой области еще один импульс в ближайшие годы, хотя проблемы конфиденциальности и безопасности ограничивают области, в которых может быть полезен распределенный подход.
Однако свою главную цель проект SETI@home так и не выполнил: после 20 лет поисков внеземной разум так и не был найден.
Новое начало
За 27 лет до прекращения проекта SETI@home, в 1993 году НАСА внезапно прекратило свою первоначальную программу SETI по поиску разумной внеземной жизни, когда она еще не началась. Он включал в себя два взаимодополняющих амбициозных проекта, один с использованием гигантского радиотелескопа в Аресибо, Пуэрто-Рико, а другой с антеннами сети Deep Space Network в Калифорнии. Теперь, почти 30 лет спустя, все изменилось, и Агентство хочет возобновить поисковые работы.
За последнее десятилетие были достигнуты большие успехи в области астрономических приборов, что привело к революции в науке открытия и изучения экзопланет.
18 апреля 2018 году на борту ракеты SpaceX Falcon 9 НАСА запустило спутник для исследования транзитных экзопланет (TESS). Миссия стала следующим шагом в поисках планет за пределами нашей Солнечной системы. В том числе тех, которые могут поддерживать жизнь. В ходе миссии уже обнаружены экзопланеты, которые периодически блокируют часть света от своих звезд-хозяев. Такой метод поиска экзопланет называет транзитным. TESS обследует 200 000 ярчайших звезд около Солнца в поисках других миров.
За почти три года TESS внес в каталог тысячи планет-кандидатов и увеличил количество известных экзопланет. Несколько из них оказались размером с Землю — в космическом масштабе и по меркам НАСА это те планеты, которые не более чем в два раза больше Земли. Чем больше миссия находит экзопланет, тем больше у нас шансов найти там следы жизни.
Принципиально новые телескопы и проекты будущих космических миссий впервые позволят искать биомаркеры, свидетельствующие о жизни на других планетах. Многие эксперты считают вероятным, что в ближайшие годы мы обнаружим внеземную жизнь, хотя, скорее всего, она будет представлена в очень простой форме.
Учитывая настоящий и будущий технический прогресс, появятся новые возможности для поиска техносигнатур. Вот почему НАСА решило снова заняться поисками внеземного разума, воспользовавшись возможностями нынешних и предполагаемых будущих космических обсерваторий.
Визуализация траектории полёта телескопа Nancy Grace Roman Space Telescopeв точку Лагранжа L2 Солнце-Земля
Эти темы, среди прочего, были в повестке дня встречи TechnoClimes 2020 под эгидой НАСА в Blue Marble Space Institute of Science (Сиэтл, США). Его цель с учеными со всего мира состояла в том, чтобы предложить новые разработки, способствующие будущим достижениям.
Наконец, из-за пандемии COVID-19 встреча была проведена виртуально в режиме видеоконференции, на которой 53 исследователя из различных дисциплин из 13 стран обсудили ряд аспектов поиска других разумных видов.
Как теперь будут искать инопланетную жизнь?
Исследователь из Института астрофизики Канарских островов (IAC) — ведущий автор исследования и новых предложений по поиску внеземных «техносигнатур» для будущих миссий НАСА. Это свидетельство использования технологий или промышленной деятельности в других частях Вселенной. Статья, опубликованная в специализированном журнале Acta Astronautica, содержит первоначальные выводы встречи экспертов по поиску разумной внеземной жизни, организованной космическим агентством для сбора рекомендаций по возобновлению поисков.
В статье представлены несколько идей для поиска техносигнатур, которые указали бы на существование внеземных цивилизаций, от самых банальных — промышленные загрязнения в атмосфере или большое скопления спутников, до гипотетических гигантских конструкций космической инженерии, например, теплозащитных экранов для защиты от изменения климата или сфер Дайсона для оптимального использования света местной звезды. Некоторые из предлагаемых поисков нацелены далеко в космос, за пределы нашей галактики, в то время как другие — на сканирование Солнечной системы в поисках зондов, которые могли быть отправлены сюда в далеком прошлом.
«Идея поиска техносигнатур опирается на технологии, которые у нас есть на Земле сегодня, и их развитие в будущем, — отмечает Якоб Хакк-Мисра, соавтор статьи и председатель оргкомитета TechnoClimes 2020. — Это не обязательно означает, что любая внеземная технология должна быть похожа на нашу. Однако представляя наше будущее, мы можем предполагать, какие следы разумной жизни стоит искать».
Проект SETI
Проект SETI (англ. SETI, Search for Extraterrestrial Intelligence) — общее название проектов и мероприятий по поиску внеземных цивилизаций и возможному вступлению с ними в контакт. Некоторые астрономы (см.: Уравнение Дрейка, Парадокс Ферми) давно считают, что планет во Вселенной так много, что даже если малая их часть пригодна для жизни, то тысячи или даже миллионы планет должны быть обитаемыми. Последние достижения астрономии и физики укрепили представление о существовании многих планетных систем, пригодных для жизни.
Начало проекта SETI датируется 1959 годом, когда в международном научном журнале Nature появилась статья Коккони и Морисcона «Поиски межзвёздных сообщений». В этой статье было показано (с анализом достижимой излучаемой мощности и чувствительности радиотелескопов), что даже при тогдашнем уровне развития радиоастрономии (1959 год) можно было рассчитывать на обнаружение внеземных цивилизаций примерно такого же технологического уровня, как земной, при условии, что они обитают на не слишком далёких от нас планетах, в планетных системах звёзд солнечного типа.
Излучение на длине волны 21 см, частота около 1420 МГц, обусловленное сверхтонким метастабильным переходом между двумя состояниями атома водорода, отличающихся взаимной ориентацией магнитных моментов электрона и протона, является универсальной физической величиной (радиолиния излучения нейтрального атомарного водорода во Вселенной). Предполагалось, что любая технологически развитая цивилизация, достигшая технологического уровня земной цивилизации, будет излучать в радиодиапазоне для контактов с другими цивилизациями на этой универсальной частоте (сигналы с частотой ниже одного гигагерца заглушают излучение быстро движущихся электронов, а на частотах выше десяти гигагерц любой сигнал получит сильные искажения из-за шума, который испускают молекулы кислорода и воды в нашей собственной атмосфере), поэтому она предлагалась в качестве приемлемой для поисков по программе SETI.
Однако поиски разумных сигналов вблизи этих значений ни к чему не привели. В 1960 г. Фрэнк Дрейк инициировал проект «Озма» (названный в честь королевы страны Оз); сигналы предполагалось искать при помощи 25-метрового радиотелескопа в Грин-Бэнк, штат Западная Вирджиния, в качестве объектов поисков были выбраны две близлежащие звезды солнечного типа — Тау Кита и Эпсилон Эридана.
Обсерватория Аресибо — крупнейший радиотелескоп в мире.
«Тарелка» телескопа, имеющая в диаметре 305 м и сконструированая в воронке на земле, фокусирует радиоволны на подвижной антенне. Конструкция антенны подвешена в центре на 18 троссах, крепящихся на трех башнях высотой 110 м каждая.
В 1971 г. NASA предложило взять на себя финансирование проекта SETI. Этот проект, известный также как проект «Циклоп», предусматривал использование полутора тысяч радиотелескопов и должен был обойтись в 10 млрд долл. Финансирование было выделено для гораздо более скромного проекта — отправить в космос тщательно зашифрованное сообщение для иных цивилизаций (cм.: Послание Аресибо, Обсерватория Аресибо). В 1974 г. сообщение, содержащее 1679 бит, было отправлено с гигантского радиотелескопа в Аресибо в Пуэрто-Рико в направлении шарового звездного скопления М13, расположенного на расстоянии 25 100 световых лет от нас. Это короткое послание представляет собой рисунок размером 23 х 73 точки; ученые обозначили на нем положение Солнечной системы, поместили изображение человеческих существ и несколько химических формул. (Если учесть расстояния, о которых идет речь, ответ можно ожидать не раньше чем через 52 166 лет.
В 1977 г. был зарегистрирован сигнал, вошедший в историю под названием «Bay». В нем можно было увидеть последовательность букв и цифр, которая представлялась не случайной и говорила вроде бы о наличии внеземного разума. (Надо сказать, не все ученые, видевшие сигнал «Bay», были убеждены в его неслучайном характере.)
В 1995 г. американские астрономы, в связи с недостаточным финансированием со стороны федерального правительства решили обратиться к частным средствам. Был основан некоммерческий Институт SETI в Маунтин-Вью, штат Калифорния, и запущен проект «Феникс»; проект предусматривает изучение тысячи ближайших звезд солнечного класса в радиодиапазоне 1200-3000 МГц. Директором института выбрали д-ра Джилл Тартер (англ.). В этом проекте используются чрезвычайно чувствительные приборы, способные уловить излучение обычного аэродромного радиолокатора с расстояния в 200 световых лет. Начиная с 1995 г. Институт SETI с бюджетом 5 млн долл. в год просканировал уже больше тысячи звезд. Но ощутимых результатов по-прежнему нет. Тем не менее Сет Шостак (англ.), старший астроном проекта SETI, с неувядающим оптимизмом верит, что система телескопов Аллена в составе 350 антенн, которая сейчас сооружается в 400 км к северо-востоку от Сан-Франциско, «наткнется на сигнал еще до 2025 г.».
Новаторский подход к проблеме продемонстрировали астрономы из Университета Калифорнии в Беркли; в 1999 г. они запустили в действие проект SETI@home. Идея проекта — привлечь к работе миллионы владельцев персональных компьютеров, чьи машины большую часть времени просто бездействуют. Те, кто участвует в проекте, скачивают из Интернета и устанавливают на своем компьютере пакет программ, которые работают в режиме скринсейвера, а потому не доставляют владельцу никаких неудобств. Эти программы участвуют в расшифровке сигналов, принятых радиотелескопом. До настоящего момента к проекту присоединились 5 млн пользователей в 200 с лишним странах мира; вместе они потратили электричества больше чем на миллиард долларов, но каждому пользователю участие в проекте стоило недорого. Это самый масштабный коллективный компьютерный проект в истории; он мог бы послужить образцом для других проектов, где требуются большие вычислительные мощности. Тем не менее до сих пор проект SETI@home также не обнаружил ни одного разумного сигнала.
5 января 2012 года было объявлено об обнаружении в рамках проекта сигнала, который может являться потенциальным кандидатом на радиосигнал внеземного происхождения. Для сужения поиска были использованы данные телескопа Кеплер, сигнал получен по направлению от экзопланеты KOI 817. Однозначной трактовки «открытия» нет.
Существует два подхода к поискам внеземного разума:
Искать сигналы внеземных цивилизаций. Рассчитывая на то, что собратья по разуму также будут искать контакт. Основных проблем данного подхода три: что искать, как искать и где искать.
Посылать так называемый «сигнал готовности». Рассчитывая на то, что кто-то будет искать этот сигнал. Основные проблемы данного подхода фактически аналогичны проблеме подхода первого, за исключением меньших технических проблем.
Один подход выражен в финансируемой НАСА программе прослушивания электромагнитных сигналов искусственного происхождения — в предположении, что любая технически развитая цивилизация должна прийти к созданию систем радио-телевизионных или радиолокационных сигналов — таких же, как на Земле. Самые ранние на Земле электромагнитные сигналы могли к настоящему времени распространиться по всем направлениям на расстояние почти 100 световых лет. Попытки выделить чужие сигналы, направленные к Земле, до сего времени остаются безуспешными, но число «проверенных» таким способом звёзд меньше 0,1 % числа звёзд, ещё ожидающих исследования, если существует статистически значимая вероятность обнаружения внеземных цивилизаций.
В 1960—1980-е годы SETI скрытно финансировалось (через научные фонды) и использовалось ЦРУ для космической радиоразведки — поиск частот, на которых работали советские спутники и наземные станции.
В 2011 году астрономы Абрахам Лоэб из Гарвардского университета и Эдвин Тёрнер из Принстонского университета предложили новую схему поиска внеземных цивилизаций. Их предложение заключается в поиске инопланетных цивилизаций по освещению их возможных городов, располагающихся на ночной стороне их планет. Существуют также сомнения, что продвинутые внеземные цивилизации могут использовать радиоволны, которые можно было бы регистрировать на космических расстояниях.
В новой работе ученые предложили искать «световые» следы внеземных цивилизаций. Так, например, они предлагают регистрировать освещённость ночной стороны экзопланет, (например, светом городов). Предполагая, что орбита планеты эллиптическая, астрономы показали, что можно измерить вариацию блеска объекта и обнаружить, освещена ли его тёмная сторона. При этом, правда, учёные предполагают, что светимость тёмной стороны сравнима со светимостью дневной (у Земли эти величины отличаются на пять порядков).
Кроме этого, учёные намерены искать яркие объекты в поясах Койпера вокруг других звёзд с последующим спектральным анализом их излучения. Астрономы полагают, что такой анализ позволит определить природу освещения — естественное оно или искусственное. Учёные подчёркивают, что все предложенные варианты нереализуемы с помощью существующей техники. Вместе с тем, по их мнению, телескопы нового поколения, как, например, американский «Джеймс Вебб», вполне могут справиться с описанными в работе задачами.
Проект «Джеймс Вебб», который в настоящее время испытывает серьёзные финансовые трудности, должен стать сменщиком «Хаббл». Диаметр его зеркала, состоящего из нескольких шестиугольных сегментов, будет составлять 6,5 м (у «Хаббла» зеркало — 2,4 м). Сам телескоп, снабжённый защитным экраном, должен будет располагаться в точке Лагранжа L2 на расстоянии 1,5 млн км от планеты. Пока старт запланирован на 2018 год.
Исследования в России
В России экспериментальные исследования SETI развивались в нескольких направлениях:
Поиск радиосигналов от солнцеподобных звёзд проводились в САО РАН на радиотелескопе РАТАН-600 в сантиметровом и дециметровом диапазонах. Исследовалось несколько десятков звёзд, расположенных вблизи эклиптики и несколько ближайших звёзд солнечного типа. Несколько звёзд наблюдались также в оптическом диапазоне с помощью 6-метрового рефлектора БТА. Ни у одной из исследованных звёзд не было обнаружено превышение потока излучения над шумами.
Поиск оптических сигналов начался в САО РАН ещё с 1970-х годов под руководством энтузиаста SETI В. Ф. Шварцмана, а после его ухода из жизни — его учеником Г. М. Бескиным. Применительно к сигналам внеземных цивилизаций были выделены две группы объектов: для цивилизаций I типа по классификации Н. С. Кардашева (сравнимых с нашей земной цивилизацией) — это звезды спектральных классов F9V-G5V в окрестностях Солнца с расстоянием до 25 парсек; для сверхцивилизаций II и III типа — объекты с необычными характеристиками, в частности, не имеющие спектральных линий. К последним относятся белые карлики DC-типа и так называемые РОКОСы (англ. Radio Objects with a Continuous Optical Spectrum, ROCOS).
Поиск сфер Дайсона, то есть гипотетических астроинженерных конструкций, предположительно сооружаемых внеземными цивилизациями около своих звёзд, ведётся в Астрокосмическом центре ФИАН под руководством академика РАН Н. С. Кардашева. Предполагается, что эти сферы поглощают большую часть энергии звезды и переизлучают её в инфракрасном, субмиллиметровом и миллиметровом диапазонах — в зависимости от температуры конструкций. Такие источники должны иметь спектры, близкие к спектру чёрного тела с эффективной температурой от 3 до 300 К.
Передача радиосообщений внеземным цивилизациям. Первое послание в Космос было направлено 19 ноября 1962 года из Центра Дальней Космической Связи СССР в Евпатории. Это было радиотелеграфное сообщение, состоящее из трех слов: «Мир», «Ленин», «СССР». В период с 24 мая по 1 июля 1999 года из Евпатории осуществлено 4 сеанса передачи информации к четырём звёздам солнечного типа в рамках международного проекта Cosmic Call. Передавались, в частности сведения по астрономии, биологии, географии, имена и индивидуальные письма около 50 тысяч участников проекта, и приглашение к любому, кто прочитал послание, откликнуться и, если можно, сообщить сведения о своей цивилизации.
Еще одним недостатком, очевидно, может оказаться неправильный выбор радиодиапазонов. Внеземные цивилизации, если они существуют, могут использовать самые разные методы сжатия. Вполне может быть, что, вслушиваясь в сжатые сообщения, распределенные к тому же на несколько частотных диапазонов, можно услышать только «белый шум».
В интервью журналу Cosmic Search Себастьян фон Хорнер говорил: «Я серьёзно думаю, что попытка установления контакта с Другими во Вселенной является нашей следующей великой целью и что её успех будет означать громаднейший шаг в эволюции человечества, сравнимый с нашим овладением речью миллионы лет назад».
В своей книге «Физика невозможного» др. Митио Каку пишет: «Учитывая стремительное продвижение программы SETI и обнаружение все новых внесолнечных планет, контакт с внеземной жизнью может произойти уже в этом столетии».
В то же время некоторые раскритиковали проект. Например, Питер Сченкель, оставаясь сторонником проектов SETI, написал, что «В свете последних достижений мы стали глубже проникать в суть вещей, и лучшим ходом представляется унять чрезмерную возбужденность и прагматично рассмотреть факты… Мы должны спокойно признать, что ранние предположения о существовании может быть миллионов, сотен тысяч или десятков тысяч передовых внеземных цивилизаций в нашей галактике более не надежны.»
Единорог в поисках внеземного разума: анализ кода SETI@home
Существует две возможности: либо мы одиноки во Вселенной, либо нет. Обе одинаково ужасны. (с) Артур Чарльз Кларк
Дискуссии о том, одиноки ли мы во Вселенной, будоражат умы людей уже не один десяток лет. Серьёзное отношение к этому вопросу имеет проект SETI, занимающийся поиском внеземных цивилизаций и возможностью вступления с ними в контакт. Об анализе исходного кода одного из проектов этой программы — SETI@home — и пойдёт речь в данной статье.
Подробнее о проекте
SETI@home — научный некоммерческий проект добровольных вычислений, использующий свободные ресурсы на компьютерах добровольцев для поиска радиосигналов внеземных цивилизаций. Проект основан на открытой программной платформе для организации распределённых вычислений — BOINC, написанной на C++.
В качестве инструмента анализа использовался статический анализатор C/C++ кода — PVS-Studio. Исходные коды проекта SETI@home доступны на официальном сайте. Инструкцию о том, как собирать проект, найти также не сложно, так что, собрав всё необходимое и приготовив чашечку кофе, я приступил к делу.
Результаты проверки
Признаюсь, что перед анализом проекта я был в предвкушении того, сколько проблемных мест удастся обнаружить. Но на моё удивление действительно интересных фрагментов кода (проблемных) оказалось не так уж много, что говорит о его качестве.
Тем не менее, подозрительные места были, и некоторые из них я бы хотел рассмотреть.
Для разогрева
Примеры кода в этом разделе нельзя подвести под какую-то одну категорию, как например «указатели» или «циклы», так они имеют разную тематику, но по-своему интересны.
Поэтому предлагаю перейти ближе к делу:
Предупреждение анализатора: V560 A part of conditional expression is always true: 0xff. seti_header.cpp 96
Подозрительным выглядит оператор ‘&&’, который используется для получения целочисленного значения. Возможно, в данном случае был необходим оператор ‘&’, так как иначе переменная ‘splitter_version’ всегда будет принимать одно из двух значений: 0 или 1.
Конечно, вероятность того, что подразумевалась прибавка к ‘splitter_version’ 0 или 1 есть, но, думаю, вы согласитесь, что она не очень велика, и в таком случае можно было использовать более понятный код (например, тернарный оператор).
Следующий подозрительный фрагмент кода — методы, которые должны возвращать значение, но, тем не менее, ничего не возвращают. Более того — они имеют пустые тела. Такой код как минимум выглядит подозрительно. Предлагаю взглянуть самим:
Что это было: задел на будущее или ошибка — сказать сложно, так как никаких комментариев к данному коду не было. Просто имейте ввиду то, что я написал выше.
Но не будем зацикливаться на этом примере, лучше взглянем, что ещё удалось найти.
Как понятно из кода, в ходе парсинга входных данных необходимо было получить значение длины (переменная ‘length’).
Что подразумевалось? В строке осуществляется поиск подстроки «length=», если она обнаружена, индекс начала подстроки записывается в переменную ‘len’. После этого исходная строка преобразуется в C-строку, из которой при помощи оператора индексации извлекается необходимое значение длины. В качестве вычисления индекса символа, хранящего значение длины, как раз используется индекс подстроки «length=» и её длина.
Однако из-за приоритета операций (или неправильно расставленных скобок в условии, видно, что они дублируются) всё пойдёт не так. Сначала будет выполнено сравнение со значением ‘npos’, а результат этого сравнения (0 или 1) будет записан в переменную ‘len’, что приведёт к неправильному вычислению индекса массива.
В ходе просмотра лога анализа я наткнулся на парочку интересных макросов. Предлагаю взглянуть и вам:
Предупреждение анализатора: V606 Ownerless token ‘0’. analyzefuncs.cpp 212
Сразу хочу сказать, что этот макрос по ходу кода встречался неоднократно. Непонятно, почему бы просто не генерировать исключение. Вместо этого в коде встречается непонятная лексема и присутствует цикл, для которого выполняется только одна итерация. Подход интересный, но к чему такой велосипед — неясно.
Указатели и работа с памятью
Для разнообразия — пример кода с указателями. Как правило, во фрагментах кода, содержащих работу с указателями или адресами, вероятность наступить на грабли порядком возрастает. Поэтому они вызывают больший интерес.
Предупреждение анализатора: V595 The ‘ChirpSteps’ pointer was utilized before it was verified against nullptr. Check lines: 138, 166. chirpfft.cpp 138
Анализатор предупреждает о том, что указатель используется до того, как выполняется проверка, на то, является ли он нулевым. Если не удастся выделить память и функция ‘calloc’ вернёт значение ‘NULL’, будет выполнено разыменовывание нулевого указателя, что, как все мы прекрасно знаем, не очень хорошо.
Другой момент заключается в том, что функция ‘free’ вызывается только в том случае, если указатель не равен ‘NULL’. Эта проверка избыточна, так как функция ‘free’ без проблем обрабатывает нулевые указатели.
Другой участок кода с подозрительным использованием функции ‘memset’. Давайте посмотрим:
Предупреждение анализатора: V579 The memset function receives the pointer and its size as arguments. It is possibly a mistake. Inspect the third argument. analyzereport.cpp 271
Из данного фрагмента кода видно, что сначала выделяется память под массив, после чего его элементы заполняются значением ‘-1’, а после с ними происходит работа. Но вот в функцию ‘memset’ третьим параметром передаётся не размер массива, а размер указателя. Для правильного заполнения массива необходимыми символами третьим аргументом следовало передавать размер буфера.
Циклы
Во многих проектах встречаются циклы, тело которых либо выполняется бесконечно, либо не выполняется вообще. SETI@home не стал исключением. С другой стороны — здесь последствия не выглядят такими критичными, как в некоторых других проектах.
Предупреждение анализатора: V621 Consider inspecting the ‘for’ operator. It’s possible that the loop will be executed incorrectly or won’t be executed at all. schema_master.cpp 9535
Ошибка весьма тривиальна. Как все мы знаем, тело цикла ‘for’ выполняется, пока его условное выражение истинно. Здесь же уже на первой итерации условие будет ложным, так что сразу будет осуществлён выход из цикла. Лично я не могу понять, что здесь подразумевалось, но тем не менее тело этого цикла никогда не будет выполняться.
Аналогичный фрагмент кода встретился ещё раз, но в другом методе другого класса:
V621 Consider inspecting the ‘for’ operator. It’s possible that the loop will be executed incorrectly or won’t be executed at all. schema_master.cpp 11633
Не столь прозрачный, но потенциально ошибочный пример:
Предупреждение анализатора: V663 Infinite loop is possible. The ‘cin.eof()’ condition is insufficient to break from the loop. Consider adding the ‘cin.fail()’ function call to the conditional expression. sqlblob.h 58
Так как мы рассматриваем циклы, несложно догадаться, что ошибка — в условии выхода из цикла ‘while’. Хотя многие наверняка не обнаружат ничего подозрительного, так как применяемый здесь метод выглядит вполне стандартным. Но подводный камень есть, иначе этого примера в статье не было бы.
Дело в том, что при возникновении сбоя чтения данных такой проверки будет недостаточно. В таком случае метод ‘eof()’ будет постоянно возвращать ‘false’, как следствие — бесконечный цикл.
Для исправления ошибки необходимо добавить дополнительное условие. Тогда цикл будет выглядеть следующим образом:
Прочие подозрительные места
Аккуратными нужно быть и с битовыми операциями. В ходе анализа встретился участок кода, приводящий к неопределённому поведению:
Предупреждение анализатора: V610 Undefined behavior. Check the shift operator ‘ Прочитали статью и есть вопрос?



