Человек пытается учить студентов программированию. Пишет что-то типа:
#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’а. В общем, «преподаватель» некомпетентен либо в языке Си, либо в стандартной библиотеке, либо в конкретных инструментах разработки. Любой из пунктов — это полный «тушите свет, сливайте воду» (ну разве что кроме стандартной библиотеки — и то, если в учебных программах придется работать с Сишными строками — то такие нюансы нужно знать, как «Отче наш»). Сможет ли такой препод ответить на вопрос студента «у меня программа не работает, что делать, помогите»?
А потом мы удивляемся, почему выпускники по профильным вроде как специальностям идут работать куда угодно — только не по написанной в дипломе специальности.
У меня всё работает.
Ну, только добавил #include и один байтик под ». =)
#include <string.h>
Ага, забыл про string.h, пока сокращал пример до «минимально нерабочей версии».
Ну и «один байтик», действительно, решает проблему.
Гипотеза сишечка говно, пускай учат X, где стрелять в ноги нельзя, подходит?
Хорошая гипотеза, особенно для таких вот «преподавателей». Для студентов — наоборот. Любое обучение — это процесс набивания шишек и стрельбы в ногу.
http://shura.luberetsky.ru/2012/01/25/soznajjtes-kodery/