C中的malloc()有哪些有用的例子?

ale*_*lex 14 c malloc

我只是malloc()在C 读书.

维基百科文章提供了一个例子,但它甫一为10个整数与比较阵列分配足够的内存int array[10].不是很有用.

你什么时候决定用malloc()C来处理你的记忆?

Eli*_*sky 19

动态数据结构(列表,树等)用于malloc在堆上分配其节点.例如:

/* A singly-linked list node, holding data and pointer to next node */
struct slnode_t
{
    struct slnode_t* next;
    int data;
};

typedef struct slnode_t slnode;

/* Allocate a new node with the given data and next pointer */
slnode* sl_new_node(int data, slnode* next)
{
    slnode* node = malloc(sizeof *node);
    node->data = data;
    node->next = next;
    return node;
}

/* Insert the given data at the front of the list specified by a 
** pointer to the head node
*/
void sl_insert_front(slnode** head, int data)
{
    slnode* node = sl_new_node(data, *head);
    *head = node;
}
Run Code Online (Sandbox Code Playgroud)

考虑如何将新数据添加到列表中sl_insert_front.您需要创建一个节点来保存数据和指向列表中下一个节点的指针.你打算在哪里创造它?

  • 也许在堆栈上!- - 分配堆栈空间在哪里?在哪个功能?当函数退出时会发生什么?
  • 也许在静态记忆!- - 您必须事先知道您有多少列表节点,因为在程序加载时预先分配了静态内存.
  • 在堆上?是的 - 因为您拥有所有必需的灵活性.

malloc在C中用于在堆上分配内容 - 内存空间可以在运行时动态增长和收缩,并且其所有权完全在程序员的控制之下.还有更多的例子,这是有用的,但我在这里展示的是一个代表性的例子.最终,在复杂的C程序中,您会发现程序的大部分数据都在堆上,可通过指针访问.正确的程序总是知道哪个指针"拥有"数据,并在不再需要时仔细清理分配的内存.