GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • cpprefjp - C++日本語リファレンス
  • GitHub Project

This view

  • Original page
  • New address

GeezerVison is showing cpprefjp.github.io — std::realloc - cpprefjp C++日本語リファレンス

  1. リファレンス
  2. cstdlib
  3. realloc

最終更新日時: 2026年06月15日 14時22分22秒 (JST)
Akira Takahashi が更新

履歴 編集

function
<cstdlib>

std::realloc

namespace std {
  void* realloc(void* ptr, size_t new_size);
}

概要

確保済みの領域ptrをnew_sizeに再確保する。

ptrは、calloc、malloc、reallocで事前に確保され、なおかつfreeで解放されていないメモリである必要がある。

それ以外のメモリの場合、動作は未定義。

ptrにnullptrを渡した場合、malloc(new_size)として動作する。

効果

メモリの確保は次のいずれかの方法で行われる。

  • 既存のメモリを拡張、縮小する。
    • 縮小した場合、再確保されたメモリのサイズまでの領域の内容が保持される。
    • 拡張した場合、新しい領域の内容は未規定。
  • 新しいサイズの領域を確保、割り当てする。その後、新しいサイズと古いサイズのいずれか小さい方のサイズに等しいメモリ領域をコピーし、古いブロックを解放する。
  • メモリが不足している場合、nullptrが返される。

戻り値

再確保できた場合、その領域の先頭のポインタを返す。

失敗した場合、nullptrを返す。もとのポインタは有効なままで、解放する必要がある。

備考

  • new_sizeが0の場合の動作は以下となる。
    • C++23まで : 未規定
    • C++26 : エラー性動作 (erroneous behavior)となる。その効果は処理系定義であり、POSIXの動作も許容される
  • 確保された領域はメモリリークを避けるため、free、reallocで解放する必要がある。

例

#include <cstdlib>
#include <iostream>

int main() {
  // 初期サイズでメモリを確保
  int* p = static_cast<int*>(std::malloc(5 * sizeof(int)));
  if (!p) return 1;
  for (int i = 0; i < 5; ++i) {
    p[i] = i;
  }
  // サイズを再確保(拡張)
  int* q = static_cast<int*>(std::realloc(p, 10 * sizeof(int)));
  if (!q) {
    std::free(p);
    std::cerr << "realloc failed" << std::endl;
    return 1;
  }// 拡張後の内容を出力(追加領域の値は未規定)
  for (int i = 0; i < 10; ++i) {
    std::cout << q[i] << ' ';
  }
  std::cout << std::endl;
  std::free(q);
}

出力例

0 1 2 3 4 0 0 0 0 0

関連項目

  • calloc: メモリを確保する
  • malloc: メモリを確保し、領域をゼロ初期化する
  • free: 確保したメモリを解放する

参照

  • P3348R4 C++26 should refer to C23 not C17
    • C++26がC23を参照するようになり、new_sizeが0の場合がエラー性動作となった
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.