Обратите внимание, что ни long, ни использование переменных для измерения автоматических массивов не являются частью C ++ - они являются расширениями, предоставляемыми gcc, и их не следует использовать, если переносимость является проблемой.
Чтобы решить вашу проблему, определите размер массива следующим образом:
bool array[arrayLength];
вызовет переполнение стека (и, следовательно, ошибку сегмента), если значение arrayLength слишком велико. Вместо этого используйте std :: vector, но помните, что память не является бесконечным ресурсом.