は私はこのような5つの整数要素の配列を初期化言う:Cでmallocされた配列の最後の要素を解放する方法は?
int *Q = malloc(sizeof(int) * 5);
for (int i = 0; i < 5; i++) {
Q[i] = i;
}
アレイがどのように見える:{0、1、2、3、4}。 は今は1つの位置によってすべてに沿ってシフトした場合:#は、いくつかのガベージ値は{1、2、3、4、#}:
Q++;
アレイのように見えます。
最後の要素を解放して配列に格納されないようにする方法はありますか?
私はこの試みた:
free(Q[4]);
をしかし、私は自由()のみQ.
に割り当てられたメモリのチャンク全体を操作できるので、これは動作しません知っているに良い方法はあります一緒にすべてをシフト?結果の配列は{1、2、3、4}のようになります。
シフトするたびにrealloc()を実行することをお勧めしますか?
はい、 'Q ++'を実行した場合、 'size - 'を調整するよりです。あなたは記憶の塊を持っており、アクセス方法を制御します。 – StoryTeller
'Q ++'の後、 'Q [4]'は "ガベージ"を含んでいません。アクセスは**未定です**。 – EOF
[realloc](http://www.tutorialspoint.com/c_standard_library/c_function_realloc.htm)を使用することができます。 – LPs