#include <iostream>
void main() {
void* ptr = malloc(3);
int *b = static_cast<int*>(ptr);
*b = 2147483647;
std::cout << *b; // 2147483647
}
У меня есть 3 байта пам'яти от malloc и sizeof(int*) показывает 4, каким образом я поместил int в 3 байта без ошибок? Компилятор MS Visual C++
Ваш код содержит неопределённое поведение (UB) - запись за границы выделенной памяти. От компилятора не требуется уведомлять о подобного рода ошибках. Подробнее об UB можете почитать в соответствующем вопросе: Разница между неопределённым, неспецифицированным и зависимым от реализации поведением
Этот код вызывает неопределенное поведение.
Ошибка не гарантируется, и эффект может быть любым (в том числе программа может работать как будто ничего не произошло, а может неожиданно сломаться).
Сборка персонального компьютера от Artline: умный выбор для современных пользователей