gpt4 book ai didi

c - 指针与 malloc 混淆

转载 作者:太空宇宙 更新时间:2023-11-04 08:42:24 24 4
gpt4 key购买 nike

我用大量的 mallocs 实现了我的代码。它有

struct* node myList;
struct node { ... } // contains stuff
struct* node_constructor(...) {
node* tempnode = (node*) malloc(sizeof(node));
node* next = ...;
... // some other info
}

然后在我的主函数中调用

myList = node_constructor(myList,otherarguments...);

我在想可能有一种方法可以做类似的事情

temp = (node*) malloc(sizeof(node)*numberOfNodes);
for(i=0; i<numberOfNodes;i++) { temp[i].next = temp[i-1]; ... } // wrong?
temp[numberOfNodes-1]; // set myList equal to the last one

并摆脱构造函数和所有那些单独的 mallocs,我似乎对如何处理我的 malloced 空间感到困惑。所以 temp 是一个 (node*),所以我很确定我的 temp[i].next = temp[i-1] 是错误的...并且也许其他一些想法也是如此。如果有人有任何建议/意见,我将不胜感激。

最佳答案

好的,当然,你可以这样做,有点。只要 temp 足够大并且您事先知道该大小。 temp 更可能是一个 void* 或一些通用容器,只是卡在未指定的内存上而不是节点上。 (因为它不是一个节点,它是所有节点所在的位置。temp[x]temp 被 malloced 是一种 hack)。

但是现在您想将另一个节点添加到您的列表中。你是怎么做到的?

单独的 mallocs 允许您将单个项目添加到列表中。如果您想要向列表中添加多个项目,则只需多次调用各个函数即可。

分配一个大的内存池,然后把它分成零碎的部分的想法是一个有效的想法,它有一些性能优势,但它的利基用途有限。

为更多项目分配足够的内存更加方便和常见。你没有错,但相信我,先学习如何以正常方式进行操作。

关于c - 指针与 malloc 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23061941/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com