1
#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++

  • 3
    Аналогия - "я тут перешел дорогу в неположенном месте, и меня не сбила машина - как такое могло произойти?..." – Harry Apr 09 '19 at 09:44

2 Answers2

2

Этот код вызывает неопределенное поведение.

Ошибка не гарантируется, и эффект может быть любым (в том числе программа может работать как будто ничего не произошло, а может неожиданно сломаться).

HolyBlackCat
  • 27,445
  • 3
  • 27
  • 40
2

Ваш код содержит неопределённое поведение (UB) - запись за границы выделенной памяти. От компилятора не требуется уведомлять о подобного рода ошибках. Подробнее об UB можете почитать в соответствующем вопросе: Разница между неопределённым, неспецифицированным и зависимым от реализации поведением

αλεχολυτ
  • 28,987
  • 13
  • 60
  • 119