这个问题可能看起来很简单,但对我来说不是。尺寸是预先未知的,这完全取决于用户的愿望。结构声明:
struct Book* books;
然后,如果一个人想要,他可以再创建 1 本书,我以这种方式为其分配内存:
books = (struct Book*)malloc(sizeof(struct Book));
但据我了解,我并没有给内存增加更多的空间,而只是清除并分配新的内存,所以我的结构中只能有 1 本书。随着一本书的添加,如何随着时间的推移在内存中添加一个位置?提前宣布某个地方并不是最佳选择,因为我们不知道需要添加多少,一切都是在黄金时间决定的。
还是一切都是通过声明 struct Book** 书籍来决定的?
要重新分配内存,请尝试使用 realloc()。 https://ru.cppreference.com/w/cpp/memory/c/realloc
在这种情况下,Realloc 不是一个选项,因为它所做的是动态分配更大的内存空间,然后从先前的较小空间复制数据,然后清除该较小空间。想象一下,您已经占用了 1 GB 的内存,并且您重新分配了 1 GB + 1 字节。在这种情况下,您将需要重新分配 1 GB + 1 字节,复制 1 GB 并清除 1 GB。非常没有生产力!两种情况,需要实现抽象数据类型列表,单链或双链。您可以使用许多库(例如 glib)中的现成解决方案或编写自己的解决方案,包括创建列表、添加元素、删除元素和查找元素的操作。每个 spmsk 元素将包含一个指针作为数据,该指针指向为书的结构动态分配的内存以及有关它的信息。