int length = 5;
int hi[length];
vs
int length = 5;
int *hi = new int[length];
サイズが一定ではない配列を静的に割り当てようとすると、コンパイラがCで文句を言うように教えられました。したがって、サイズが不明な配列が必要になった場合は、メモリを動的に割り当てる必要がありました。しかし、最初の例を許可するコンパイラーができたので、それらは正確に何をしているのでしょうか?彼らはまだデータセグメントに参加していますか、それともヒープに参加していませんか?それらがヒープ上にある場合、例の違いは何ですか。また、最初の例ではなく、2番目の例でdelete []を呼び出す必要があるのはなぜですか?