C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.95394 の関連記事表示

<< 0 >>
■95394  Re[1]: C++ サイズ0でnewした場合
□投稿者/ 774RR -(2020/07/28(Tue) 15:30:01)
    サイズ0ってのは int* p=new int[0]; の意味? (new int で 0 バイトを取ることはできないので)

    JIS X 3014:2003 5.3.4 new 式の 7
    直接 new 宣言子の中の式の値がゼロの場合、割付関数が呼び出され、要素のない配列が割り付けられる。
    と規定されているため、規格合致処理系であれば
    ・要素数0のメモリが確保される(管理用オーバーヘッドを含めると0バイトより大きい)
    ・プログラマは返された領域を使ってはならない
    ・ delete[] するまでメモリは使用済みであって再利用されない
    ってことっス。
    # 同 6 には非負とあるので、負数を渡すのは違反

    この辺は C の malloc(0) の挙動にも似ていて JIS X 3010:2003 7.20.3
    ・0バイトのオブジェクトを割り当ててその先頭へのポインタを返した場合には
    ・プログラマは返された領域を使ってはならない
    ・返された領域に対して realloc を使ってよい
    ・返された領域に対して free を使ってよい( free するまで再利用されない)
    ・返された領域は管理領域を含めると0バイトより大きい

    ってことで delete[] しないとメモリリークするですよ。
記事No.95391 のレス /過去ログ165より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -