我有一個向量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
文檔的哪一部分讓你相信這樣的事情可能是這樣? –