Человек пытается учить студентов программированию. Пишет что-то типа:
#include <stdlib.h>
void main(){
char *p;
p = (char*) malloc(strlen("John") * sizeof(char));
strcpy(p, "John");
// skipped some code
free(p);
}
Компилирует все в Visual Studio, в режиме Debug – и естественно, сталкивается с адской руганью на последнюю строчку, после чего обращается за помощью к коллективному разуму:
Даже если соотношение между потребной для хранения строки памятью и значением strlen благополучно забыто (ну не каждый день приходится работать с C string’ами) – то отладчик Visual Studio довольно быстро помогает понять, что именно послужило причиной heap corruption’а. В общем, “преподаватель” некомпетентен либо в языке Си, либо в стандартной библиотеке, либо в конкретных инструментах разработки. Любой из пунктов – это полный “тушите свет, сливайте воду” (ну разве что кроме стандартной библиотеки – и то, если в учебных программах придется работать с Сишными строками – то такие нюансы нужно знать, как “Отче наш”). Сможет ли такой препод ответить на вопрос студента “у меня программа не работает, что делать, помогите”?
А потом мы удивляемся, почему выпускники по профильным вроде как специальностям идут работать куда угодно – только не по написанной в дипломе специальности.
Запись опубликована в блоге Шуры Люберецкого. Вы можете оставлять свои комментарии там, используя свое имя пользователя из ЖЖ (вход по OpenID).