ベクトルがstruct a
です。サイズはコンパイル時には分かりません。mallocは再帰的に動作しますか?
すべてstruct a
には、struct b
というベクトルへのポインタが含まれています。 struct b
のベクトルの長さはコンパイル時には分かりません。だから、
私はこれを行う場合:例えば
#include <stdio.h>
#include <stdlib.h>
struct b {
int n;
};
struct a {
int n;
struct b *v;
};
int main() {
struct a *s;
struct a *ta;
struct b *tb;
s = (struct a*)malloc(sizeof(struct a) * 32);
s->v = (struct b*)malloc(sizeof(struct b) * 32);
s->n = 1234;
((s->v)+1)->n = 5678;
fprintf(stderr, "%p: %i/%p: %i\n", s, s->n, (s->v)+1, ((s->v)+1)->n);
ta = s;
tb = (s->v)+1;
free(s);
fprintf(stderr, "%p: %i/%p: %i\n", ta, ta->n, tb, tb->n);
return 0;
}
出力:
0x1cb3010: 1234/0x1cb3224: 5678
0x1cb3010: -1526330504/0x1cb3224: 5678
は同じポインタ内のメモリ・ブロックが割り当てられているとき、自動的に解放されます万が一構造体Bのベクトルをいましたか?または、struct a
ベクトルのすべてのアイテムについて、最初に個別のstruct b
個のベクトルを解放する必要がありますか?
The question on this linkは、この記事の重複として示唆されているが、ここで疑問がfree
コール内で、代わりに再帰的な手順を作成する方法についてアドバイスを求めての既存の機能について尋ねます。
いいえ、手動で行う必要があります。 –
また、 'malloc'の結果をキャストすべきではありません – UnholySheep
文書のどの部分がそうであるかのように思われる部分はありますか? –