2012-03-20 20 views
1
char * a = new char[]; 
a[0]='1'; 
delete []a; 

私は配列のサイズを指定しませんでしたが、実行したときにデバッグエラーが発生しました。しかし、私は次のようにこのコードを書く:char型配列を削除

char * a = new char[1]; 
a[0]='1'; 
delete []a; 

それは問題ありません。

番号を指定すると、どのように正しく動作するのか教えてください。

+5

メモリを割り当てるときに、割り当てる量を指定する必要があります。最初の人がエラーを出さなかった場合、あるいは少なくともコンパイル時に警告を出さなかった場合、私は驚くかもしれません。 –

+0

@Joachim:MSVCは診断なしで構文を受け入れます!私はかなり驚いています。 –

答えて

3

char * a = new char[];

任意のメモリを割り当てていません。それは有効なステートメントでもなく、少なくともエラーや警告が出るはずです。

char * a = new char[1];

の1文字を行い、あなたがそれを使用して削除することができます理由です。新しいキーワードは、割り当てられるメモリ量を必要とします。

+0

私は 'char * a = new char [];'は有効な文ではないと思います。メモリ割り当ての可能性はありません –

+0

@ another.anon.coward-私は同意します。更新しました。 – vidit

+0

ありがとうございました!コメントに指摘されているように、g ++はコンパイル時エラーをスローしますが、MSVCはそれを受け入れます –

1

新しいキーワードを使用する場合は、予約するメモリの量を指定します。

たとえば、char *a = new char[1];と言うときは、1文字を保持できる配列が必要であると言います。

投稿した最初のステートメントでは、メモリが予約されていないため、プログラムがクラッシュしています。

0

char * a = new char[];

あなたは、削除のためにあなたは、配列のサイズを指示する必要がありませんしかし[]

内で行う必要があります。これは、割り当てがどのくらいのメモリランタイムシステムを教えてくださいポインタa

delete []a;

しかしトンを削除するための[]を置くことを忘れてはいけませんが指す配列のサイズを知っています彼は配列です。

関連する問題