Мой мозговой штурм:
Утечки памяти тонкого сорта всегда приятно иметь. Возиться с классами, конструкторами, копировальными конструкторами и деструкторами, и вы сможете с легкостью создать сложную задачу.
Разовые ошибки для циклов массивов также являются классическими.
Тогда вы можете просто связываться с умами читателей, играя с именами вещей. Создайте переменные с чуть разными именами, переменные с рандомизированными (и слегка различающимися) именами и т. Д., А затем позвольте им попытаться определить место, где вы смешали length
и lenght
. Не забывайте о различиях в корпусе.
Соглашения о вызовах также могут быть использованы для создания тонких ошибок (например, изменение порядка параметров).
Также давайте не будем забывать о бесконечных часах удовольствия от хитрых определений и шаблонов препроцессора (знаете ли вы, что шаблоны C ++ предположительно завершаются по Тьюрингу?) Ошибки метапрограммирования должны быть интересными.
Следующая идея, которая приходит в голову, - предоставить правильную программу, но с ошибочными входными данными (тонко, конечно). После этого программа потерпит неудачу из-за отсутствия проверки ошибок, но пройдет некоторое время, пока люди не поймут, что ищут проблемы не в том месте.
Условия гонки часто сложно воспроизвести и исправить, попробуйте поиграть с многопоточностью.
При случайном осмотре можно легко пропустить переполнение / переполнение.
И последнее, но не менее важное: если вы программист, попробуйте вспомнить, что было последней большой проблемой, на решение которой вы потратили две недели. Если вы не программист, попробуйте найти и спросить их. Я программист .NET, поэтому, к сожалению, мой опыт мало связан с вашим требованием C / C ++.