動的メモリ割り当てを行う状況

  • 扱うデータのサイズが予想できない場合

動的メモリ割り当てを行う意味

以下の静的なメモリ割り当ての問題点を解決できる。
  • 余ってしまった時に無駄
  • もっと必要になった時に拡張できない

-new演算子およびdelete演算子

p-var = new type;
delete -p-var;

メモリ割り当てに失敗したとき

new演算子が割り当ての失敗を示す方法は以下の2通りあり、またどちらの動作を取るかはコンパイラによって異なる。
  • new演算子が返されたヌルポインタを返す
  • 例外(構造化された形式で管理できる実行時エラー)を生成する
※「new(std::nothrow)」を使うことによって例外を発生させず、ヌルポインタを返すように強制することができる。

ヌルポインタを返した時の対処法

#include <iostream>
#include <new>
using namespace std;

int main()
{
  int *p;
  p = new int;  // intにメモリを割り当てる、割り当て失敗時は例外を投げるかもしれない
  // p = new(nothrow) int; // これでメモリ割り当て失敗時にNULLを返すことが保障される
  if (!p) {
    cout << "メモリ割り当て失敗.\n";
    return 1;
  }

  for (*p =0; *p < 10; (*p)++)
    cout << *p << " ";

  delete p;  // メモリを解放する

  return 0;
}

例外を生成したときの対処法

#include <iostream>
#include <new>
using namespace std;

int main()
{
  int *p;
  try {
    p = new int;  // intにメモリを割り当てる
  } catch (std::bad_alloc xa) {
    cout << "メモリ割り当て失敗.\n";
    return 1;
  }

  for (*p = 0; *p < 10; (*p)++)
    cout << *p << " ";

  delete p;  // メモリを解放する

  return 0;
}

Menu

XML

オープンソース

エンドツーエンド暗号化

プロジェクト管理

フォーラム

GitClient

ホスティング

開発手法

ドメイン駆動設計:DDD?

テスト駆動開発:TDD

ビヘイビア駆動開発:BDD

チケット駆動開発:TiDD

課題追跡システム:ITS(issue tracking system)
バグ追跡システム:BTS(bug tracking system)

ビルドツール

JavaScript

ビルドファイルを自動生成

設定ファイル

データシリアライズ

マルチフォーマット

継続的インテグレーション

オススメ

for Windows

その他

構成管理

テストツール

デプロイツール

仮想マシン構築

オーケストラレーション

仮想化ソフトウェア

クラスタリソースマネージャ

コンテナオーケストレーション

サービスメッシュ

Kubernetes

高可用性クラスタ/HAクラスタ

  • Pacemaker?

負荷分散/ロードバランス(Load Balancing)クラスタ

HPC(High Performance Computing)クラスタ

テスト

JavaScript,TypeScript

Living Documentation Generator

ドキュメント作成

reStructuredText

CommonMark

グラフドキュメント

問い合わせ言語

ファイルシステム

分散型Web

Web API作成補助ツール

パッケージ管理システム

Ruby

Chef

OCaml

Rust

Web Frontend

Node.js

Haxe

Microsoft .NET Framework

Mac OS X

Debian

Red Hat系

Gentoo Linux

Arch Linux

シーケンス図

フローチャート

ログイン

脆弱性関連情報

ツール

Web

Components

Template engine

CSS Preprocessor

Haxe
Node.js

JavaScript

MVVM系フレームワーク
比較
データバインディング

Websocket

GDPR対策

Cookie利用

Browser互換確認

Linux

コマンドラインシェル

Record your terminal session

Windows

コマンドラインシェル

メニューサンプル1

Microsoft Media Foundation

  • TopoEdit?

MFCaptureToFile

IMFSinkWriter?

IMFSourceReader?

OpenCV

webページ作成

デザイン

オンラインプログラミング

IDE

プログラミングに最適なフォント

アルゴリズム

コスト・マネジメント

スケジュール・コスト管理

  • EVM?

見積・請求書

デザインソフト

クラウドソーシング

コードバウンティ

管理人/副管理人のみ編集できます