【问题标题】:C dynamic allocate chunk of memoryC动态分配内存块
【发布时间】:2012-10-21 06:00:01
【问题描述】:

这是我的数据结构

struct Node{
      int x;
      Node *next;
      Node *prev;
}

如果我分配内存

Node *A = malloc (sizeof (Node) * 10);

在这种情况下,如何使用数组索引访问数组中的每个框?还是不可能?

我的目标只是想在这块内存中创建一个链表。

基本上我想分配一块内存,然后分配它们的上一个和下一个......

也许这令人困惑,对不起我的措辞..

【问题讨论】:

  • 您是在尝试编写 C 还是 C++?
  • 可能是C;否则,malloc 将失败,因为他需要对其进行类型转换。
  • 如果是 c 则必须写 struct Node *A 而不是 Node *A...否则编译器会报错

标签: c arrays memory-management linked-list


【解决方案1】:

这为您提供了一个包含 10 个Nodes 的数组,可通过A 访问。现在,您所要做的就是例如

A[0].next = &A[1];

设置第一个节点的next值。

【讨论】:

  • 你有一个Nodes 的数组,但它们可以以任何顺序链接(例如A[0].next = &A[7])。这有点不寻常,但并不疯狂。
  • 顺便问一下,A[i].x 中的初始值是多少?
  • 未指定。你应该初始化它。
【解决方案2】:

malloc 返回void* 然后你应该将它转换为你的类型Node*

Node *A = (Node *)malloc (sizeof (Node) * 10);

【讨论】:

  • 如果是 C++,强制转换是强制性的(但new Node[10] 会更好)。如果是 C,则不需要演员表,并且在风格上应该避免。
【解决方案3】:

以您的方式分配许多节点可能会有效地进行内存管理,但我不会像访问数组一样访问它们。我认为你应该依赖链表而不是混合这两种方法,因为它很容易导致难以追踪和修复的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-07
    • 2015-06-27
    • 2021-02-28
    • 2012-01-20
    • 1970-01-01
    • 2015-09-25
    • 2018-01-29
    • 1970-01-01
    相关资源
    最近更新 更多