Отладчики ничего не гарантируют. Если в программе есть UB, то результат может зависеть от версии компилятора, текущего времени и погоды на Марсе.
Гарантирует только Госстрах. Отладчики для того и существуют, чтобы помогать разбираться с ошибками программистов, простимулированными разными гадостями шибко умных оптимизирующих компиляторов. Как и отладочные режимы в компиляторах.
Программисты-теоретики, блин. ТС ещё в кубики играется, а вы его UB грузите, называя неопределённым поведением вполне закономерное падение процесса. Формально - конечно, "вы находитесь на воздушном шаре".
Да, но вот оказывается что сброс буфера не гарантирует, что не заканчивающаяся символом новой строки строка будет выведена (я тоже этого не знал).
Всякая дрянь бывает. Вы, действитель, думаете, что ТС собирает свой Hello world на какой-нибудь системе с выводом на перфокарты?
Это уже вопрос к системе, а не к программе. Кроме того, никто не гарантирует, что программа с UB завершается с ошибкой, а не форматирует диск после чего завершается с кодом 0.
Нельзя рассматривать программу в отрыве от системы, на которой она выполняется. У ТС скорее всего OS выводит сообщение о падении, а не взрывает атомную бомбу.
А malloc, видимо, ничего не делает.
Какая-то память выделяется автоматически при запуске, но произвольный указатель (если бы мы записали в S0.x какой-то мусор, а не оставили неинициализированным) не обязан смотреть на существующую память.
maloc выделяет память из заранее созданной кучи. Нет кучи - нет маллока. Такое тоже бывает, хоть в плюсах и редко. Кроме того, что такое "выделенная память" на системах с виртуальной памятью имеет множество нюансов. Как минимум, адресное пространство процесса уже создано.
Разглядывание неопределенного поведения в пошаговом отладчике??? Разбирающемуся в теме человеку может быть полезно в ряде случаев, но вот начинающему такое разглядывание лишь набьет голову бессмысленными домыслами из разряда "безногий таракан не слышит", как в старом анекдоте.
Да, именно! Отключить оптимизацию и ходить по строчкам пошагово. Чтобы увидеть, в каком именно месте падает, хотя бы. Особенно, начинающему. Забив на то, что отключение оптимизации тоже не прописано в стандарте (кажется). Exterminate этот комитет по стандартизации, довёдший плюсы до состояния PL/1!
Не совсем понимаю, при чем здесь нормальное завершение, если речь идет именно о ненормальном. И что именно вы хотели добавить к обсуждению своим заявлением о "тоже что-то должно быть написано системой в консоль". Да, что-то будет записано. Правда, обычно не в stdout, а в stderr, то есть понять смысл изначального утверждения о "ничего не выводит" труда не составляет.
Вы сами уже запутались. В данном месте вы утверждали именно про нормальное завершение процесса. Мол, он имеет право не выводить при нормальном завершении последнюю строку, которая не завершена переводом строки. Ракссматривая какую-то экзотические процессы в вакууме, а вовсе не нужды TC. Да и sdterr на этом уровне изучения языка всегда та же консоль.
Не ясно, что тут вообще хотели сказать. Неинициализированное значение указателя запросто может указывать в тот регион виртуального адресного пространства процесса, для которого никакой "памяти" пока не создано.
Может указывать, может не указывать. Я говорил, что утверждение про память было настолько общо, что некорректно.