изменится с <iostream.h> на <iostream>, что приведет к переполнению буфера? - PullRequest
0 голосов
/ 18 октября 2011

Мне нужно собрать несколько старых кодов, которые я получил на своем офисном компьютере, на котором установлено gcc 4.4.5.Я отредактировал код (удалив .h или добавив что-то вроде <cstring>), чтобы привести их в соответствие, чтобы они могли быть скомпилированы с помощью gcc 4.4.5.Однако после, казалось бы, успешной компиляции двоичный файл выдает переполнение буфера каждый раз, когда я запускаю его.Но код работает без ошибок на моем компьютере дома (gcc 4.1.2).Так возможно ли изменение, которое я сделал, вызвало эту ошибку?Я не уверен, так как я на самом деле не программист.

1 Ответ

9 голосов
/ 18 октября 2011

Гораздо более вероятно, что оригинальный код каким-то образом содержал ошибки (неопределенное поведение, переполнение буфера и т. Д.), Но старый компилятор создал (или содержала старую библиотеку) код, который был более терпимым к этим проблемам ( а) .

Боюсь, вам, вероятно, придется пойти и исправить (или заставить кого-то исправить) первопричину проблемы. Мой вопрос к вам: «Если вы не считаете себя программистом, почему вы редактируете код и перестраиваете его?».

Моя мама тоже не кодер, но она не возится с ядром Linux: -)


(a) Иногда неопределенное поведение на самом деле работает! Это на самом деле его самый раздражающий аспект. Намного лучше, что он будет постоянно терпеть неудачу, так что мы решим больше проблем, прежде чем выпустить их на наших бедных клиентов. Но даже когда это работает, это не делает его хорошей идеей.

...