Директива MISRA C 2012 4.12 "Динамическое распределение памяти не должно использоваться".
В качестве примера документ содержит этот образец кода:
char *p = (char *) malloc(10);
char *q;
free(p);
q = p; /* Undefined behaviour - value of p is indeterminate */
И документ гласит, что:
Хотя значение, сохраненное в указателе, не изменяется после звоните бесплатно, на некоторых объектах возможно, что память который он указывает больше не существует и акт копирования этого указателя может вызвать исключение памяти.
Я в порядке с почти всем предложением, но в конце. Как p и q оба выделены в стеке, как может копия указателей вызвать исключение памяти?