170 похожих чатов

Коллега столкнулся с вот такой проблемой. В программе на С

он забыл в sprintf указать буфер для формирования строки. То есть, написал что-то типа такого:
sprintf("format string %s, %d", cstr, 123);

По умолчанию в ibmi C компиляторе не включено то, что строковые литералы должны быть в RO памяти. В результате функция отработала и попортила память, где лежала форматная строка.
Далее были философские рассуждения об опасности указателей, в плане того, что можно вот так память запороть. Венцом рассуждений был вопрос: а в С++ защита от "испоганивания" памяти лучше, чем в Си?

4 ответов

2 просмотра

Конечно... нет

Так обсуждали же уже выше, что в литералы писать нельзя и нормальный компилятор это ловит

d7d1cd- Автор вопроса
d7d1cd- Автор вопроса
Alexander Karaev
Так обсуждали же уже выше, что в литералы писать н...

Я, например, всегда даю компилятору опцию, чтобы он литералы клал в RO. То есть, если бы он так сделал, то да, он бы не поймал это на этапе компиляции. Но программа бы упала в рантайме.

Похожие вопросы

Обсуждают сегодня

У меня такой вопрос. Вот мне нужно сделать бинарный файл с ассемблер кода: [bits 32] [org 0x7c00] start: cli mov esp, stack_space call _main hlt section .tex...
Dmytro Parkhomenko
26
@FAssembler не знаешь, fasm поддерживает thumb?
Александр Белокопытов
46
Вот сравним знания, которые требуются, чтобы знать все эти условности С компилятора, и знания, которые требуются чтобы писать программы на ассемблере. Что проще?
КТ315
23
Фуух, победила раскраску. Ну почти) Кому что посчитать? )))
Катерина Свиридова
17
Наивный вопрос, а можно в лазарус как-то оптом сохранить состояние всех элементов интерфейса приложения перед его закрытием, например?
Кокошник наголо
12
model small .stack 256 .data arr db 16 dup(?) mes db 10, 13, "Enter 16 numbers: $" mes1 db " $" mes2 db 10, 13, "Sorted: $" mes3 db 10, 13, "$" i db 0 .code ...
Ыиу
42
Ребят нубский вопрос, но я в поиске чата не нашел ничего об этом. Установил я clang, Code-Blocks ( который с wingw). Пытаюсь запустить свой хелловорлд, а мне пишет fatal error...
Дима Копышов
15
При чем здесь DLL?
Marek Kotovsky
40
Чатик, как решать такую проблему: OOM Killer убивает систему быстрее чем в той вызовется GC. Если убрать OOM Killer, то GC успевает вызваться и память очищается. Лучше вообще...
Lama Lover
5
Снова этот оффтоп про С... В чате С не говорят столько про ассемблер, сколько в чате по ассемблеру говорят про С. Не стыдно?
КТ315
45
Карта сайта