Я пытаюсь убедить (со ссылкой на конкретные части стандарта C99) коллегу, что следующее поведение undefined:
int *p = malloc(1);
p[0] = 0;
Но я не могу найти конкретные детали в стандарте, которые явно гарантируют, что это undefined. Я ищу конкретные шаги в стандарте, которые приводят к этим выводам: undefined поведение. Это преобразование из void *
в int *
в первую строку? Назначение во второй строке?
Единственная релевантная часть, которую я могу найти о malloc
, заключается в том, что она возвращает правильно выровненный указатель (7.20.3):
Указатель возвращается, если выделение успешно выполняется соответствующим образом, чтобы его можно было назначить указателю на любой тип объекта, а затем использовать для доступа к такому объекту или массиву таких объектов в выделенном пространстве (...)
Я попробовал grepping для пробела в норме, но слишком много шума из-за пробела и других лексических проблем.