int az = 0;
functioncall(a);
Это нормально, что касается поведения.
int* a = (int*)malloc(sizeof(int));
functioncall(&az);
Это вызывает неопределенное поведение (UB) внутри функции, когда вы делаете *i++
.Поскольку malloc
только выделяет память, она не инициализирует ее.Это означает, что *i
все еще неинициализирован, и чтение неинициализированной памяти вызывает UB;это объясняет, почему *i++
является UB.А UB, если вы знаете, самая опасная вещь в C ++, потому что это означает, что может произойти все что угодно.
Что касается первоначального вопроса, что бы вы предпочли?Таким образом, ответ таков: предпочитайте автоматическую переменную вместо указатель (будет ли он выделен с malloc
или new
).
Автоматически означает Быстро, Чисто и Безопасно.