может быть это hostsFile 'nil ??
func main() {
ansInstance := NewAnsInstance("name", "url", "path")
// add code and check hostsFile
fmt.Printf("%+v\n", ansInstance)
}
Стандарт не требует использования стека и не имеет ничего для высказывания о переполнениях стека.
Стандарт C даже не определяет стек, таким образом, он, конечно, не определяет то, что происходит когда переполнения стека.
Стандарт C99 не определяет стек; это только обсуждает автоматическое или выделенное устройство хранения данных в кратком обзоре, тогда как непрерывный стек с водосливным обнаружением является только одним механизмом для реализации автоматического хранения.
Раздел 7.14 из стандарта определяют SIGSEGV как сигнал, который происходит на "недопустимом доступе к устройству хранения данных". Реализации C не требуются, чтобы генерировать любые сигналы, но реализации с помощью непрерывной стопки фиксированного размера* обычно сигнализируют о SIGSEGV, если переполнение стека обнаруживается.
Можно зарегистрировать функцию-обработчик сигнала для SIGSEGV, но он не может возвратиться -" [я] f и когда функция возвращается, если значение сигнала является SIGFPE, SIGILL, SIGSEGV или каким-либо другим определенным реализацией значением, соответствующим вычислительному исключению, behavio [u] r не определен".
(* не, что я сознательно работал с реализациями C, которые не делают, но я ни о чем не знаю в стандарте C, предотвращающем использование общих методов, используемых для реализации growable доменов автоматического хранения в других средах),
Согласно некоторым ответам на этот вопрос, стандарты C даже не имеют ничего для высказывания о существовании стека, уже не говоря о переполнении стека.
Ответы здесь корректны в заявлении, что это не имеет отношения к c стандарту, но Ваш оператор, что "Кроме завершения процесса, не кажется, что существует много, который может быть сделан", не - как общность - верен.
На самом деле, в большинстве систем с управлением виртуальной памятью и по требованию подкачкой страниц, выделенный стек является довольно маленьким (обычно на 4 КБ больше, чем в настоящее время используется), и часто переполняется (который генерирует прерывание по отсутствию страницы), и ОС просто добавляет другую страницу памяти к стеку для потока.
Предел стека - обычно - 1 МБ, является просто довольно произвольным числом, выбранным для принятия мер против безудержных программ, и обычно не является абсолютным пределом (хотя это был на некоторых моделях памяти с процессорами Intel IIRC). Обычно не имело бы смысла выделять 1 МБ физической памяти к каждому потоку.
Я абсолютно уверен специфические особенности того, что происходит, определяются операционной системой однако, во всех случаях, программа должна выйти. Вы корректны в предположении, что нет действительно ничего, что можно сделать, после того как переполнение стека происходит (по крайней мере, как программист). Все, что можно действительно сделать, предотвращают их во-первых.
Это до операционной системы. Много операционных систем позволяют размеру стека по умолчанию быть перезаписанным, все же. Например, в Windows, можно использовать этот флаг компоновщика для увеличения размера стека от 1 МБ до более высокого значения.
Как другие люди упомянули, в стандарте ничто не говорится о стеке.
Но, я думаю это, это должно было определить поведение переполнения стека, в стандарте будет сказано, что это приводит к неопределенному поведению.
:: rimshot::