Какая была самая опасная ошибка программирования, которую вы допустили в C? - PullRequest
8 голосов
/ 12 ноября 2008

Я программист среднего уровня. Если вы допустили какую-либо ошибку в коде, о которой позже узнали, что она наиболее опасна / вредна для всего приложения, поделитесь этим кодом или описанием. Я хочу знать это, потому что в будущем я могу столкнуться с такими ситуациями, и я хочу получить ваш совет, чтобы избежать таких ошибок.

Ответы [ 26 ]

1 голос
/ 26 ноября 2008

Будучи программистом на Лиспе, я привык выделять закрывающие скобки, как в:

(cond
    ((eq a foo)(bar ...
        ....
        ))
    )

и я перенес это в программирование на C:

if (a == foo){
    bar(...);
    ....
    }

Затем я попал на проект хорошего размера на C, и другой программист должен был внести изменения в мой код. Он неправильно прочитал мои заключительные скобки и освободил память слишком рано. Это вызвало чрезвычайно тонкую ошибку, которая произошла во время кризиса. Когда его нашли, его сильно обвинили. Но вы могли бы сказать, что это была моя вина. Это было не весело, если не сказать больше.

0 голосов
/ 12 февраля 2016

Забыл поставить ; в конце. Избыток }. Ошибочно набрал ,

Это заставляет меня часами сходить с ума и выяснить, что пошло не так с моими кодами.

0 голосов
/ 14 ноября 2008
if (importantvar = importantfunction() == VALID_CODE)

Это когда я имел в виду это:

if ((important var = importantfunction()) == VALID_CODE)

Это привело ко многим часам отладки, когда я предположил, что это работает как последний.

0 голосов
/ 12 ноября 2008

Одна вещь, за которой нужно следить, это границы массива. Если вы выходите за пределы, при неудаче вы можете перезаписать память, которая используется для других данных.

Одна неприятная ошибка, связанная с этим, выходила за пределы статической переменной массива в функции. Это закончилось как функция, изменяющая значения локальных переменных вызывающей функции. Это было не так просто для отладки ..

0 голосов
/ 12 ноября 2008
#include <string>

Я думаю, что C поддерживает строки изначально (используя Metroworks codewarrior, около 8 лет назад).

Я сделал это для финального проекта, содержащего около 15 000 строк кода. Я использовал эту библиотеку для выполнения всего, что связано со строками (добавление, разбиение и т. Д.) Только для того, чтобы TA не мог скомпилировать ни одного бита моего назначения (используя GCC.)

Мало ли я узнал, что metroworks создали свою собственную библиотеку строк. Я провалил этот класс.

0 голосов
/ 12 ноября 2008

Я помню две ошибки:

  1. возврат адреса автоматической переменной из функции, в которой она была создана;
  2. копирование строки в неинициализированный и нераспределенный указатель на символ.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...