void test(unsigned nmegabytes, std::vector<void *>& saver) {
 unsigned alloced = 0;
 printf("[%u]MByte\n", nmegabytes);
 for (;;) {
  void *p = malloc(nmegabytes * 1024 * 1024);
  if (!p) {
   printf("malloc() returns NULL at allocated %uMB\n", alloced);
   break;
  }
  *(int *)p = 0; // アクセス違反で落ちる?
  alloced += nmegabytes;
  saver.push_back(p);
 }
 // clear
 for (std::vector<void *>::iterator it = saver.begin(), end = saver.end(); it != end; ++it) {
  free(*it);
 }
 saver.clear();
}
int main() {
 std::vector<void *> saver;
 saver.reserve(4 * 1024);

 test(1, saver);
 test(50, saver);
 test(500, saver);
}