c - C 中 malloc() 的一些有用示例是什么?

标签 c malloc

我正在阅读有关 C 中的 malloc() 的内容。

Wikipedia article提供一个 example ,但是与 int array[10] 相比,它只是为 10 个整数的数组分配了足够的内存。不是很有用。

您什么时候决定使用 malloc() 而不是 C 为您处理内存?

最佳答案

动态数据结构(列表、树等)使用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;
}

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

  • 也许在堆栈上! - NO - 该堆栈空间将分配到哪里?在哪个函数中?当函数退出时它会发生什么?
  • 也许在静态内存中! - NO - 然后您必须提前知道您有多少个列表节点,因为静态内存是在程序加载时预先分配的。
  • 在堆上? - 因为您拥有所有必需的灵 active 。

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

关于c - C 中 malloc() 的一些有用示例是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4084950/

相关文章:

c - 简单的 4 行 C 程序,带有大量 malloc,仅使用 Valgrind 出现段错误

c - 如何使用指针在 C 中的第一个空格上分割字符串?

c - 如何返回一个数组字符串,其中字符串数组与C中的其他字符串数组组合?

c - 在 C 中释放结构是否也会删除其成员?

c - MacOS 终端与 Xcode 中的不同输出(C 程序)

c - 如何在c中找到具有正数和负数的二维数组的总平均值

c - 这段 C 代码有漏洞吗?

c - C中的字符串操作

c++ - Linux串口RAW模式

c - 将字符串分配给字符数组