【发布时间】:2016-12-29 18:14:46
【问题描述】:
我定义了一个书本结构,其中包含指向章节结构的指针列表:
typedef struct chapter {
int pages;
//much more information
} chapter;
typedef struct book {
chapter* all_chapter;
int nb_chapter;
} book;
现在在我的函数中,我分配了 2 个 book 类型的变量。我正在处理 NULL 指针,但为了保持代码简短,我将其省略!
book* first_book = malloc(sizeof(book));
first_book->nb_chapter = 5;
first_book->all_chapter = malloc(first_book->nb_chapter * sizeof(chapter));
book* snd_book = malloc(sizeof(book));
所以现在我希望在某些情况下第二个变量 snd_book 获取第一本书的所有章节指针,但不是复制它们,而是指向分配的相同内存,这意味着如果我然后释放 snd_book->chapter 然后 @987654324 @ 也是空的。
但如果我这样做了
snd_book->chapter = first_book->all_chapter;
然后一切都被复制了。
我是否需要将章节定义为二维指针或如何实现?
【问题讨论】:
-
不,
snd_book->all_chapter = first_book->all_chapter;不会复制 “所有内容”。您是如何确定会出现这种情况的? -
snd_book->chapter似乎也是语法错误,你在做什么? -
正如 UnholySheep 已经提到的,指针分配不会复制所有内容。但它确实复制了分配的地址,所以如果你打电话给某事。喜欢
free( first_book->all_chapter ); first_book->all_chapter = NULL;`snd_book中的指针将保持以前的状态,但访问它会调用 UB。为避免这种情况,您确实需要指向指针的指针 -
您能详细说明您要达到的目标吗?