从堆栈内存中删除结构

2023-12-28

我有一个链表结构,我想将一个节点(另一个结构)指针传递给一个函数(该节点是链表的一部分,但我将节点单独传递给删除器函数

我希望它将下一个节点数据复制到自身中(覆盖其数据),并删除下一个节点,从而删除自身(这部分正在工作)。 我让它检查传递的节点是否是列表中的最后一个节点,如果是,则删除自身。

我不知道如何从堆栈中删除结构(我知道我可以使用堆内存对其进行 malloc() 和 free() )。

#include <stdlib.h>
#include <stdio.h>

typedef struct {
    int data;
    struct node * next;
}node;

typedef struct {
    struct node * head;
}linked_list;

void print_list(linked_list * list) {

    node *current = list->head;
    while (current) {
        printf("Current node has %d\n",current->data);
        current = current->next;
    }
}

void delete_node(node * n) {
    node * next = n->next;
    if (next) {
        n->data = next->data;
        n->next = next->next;
    }
    else {
        *n =  NULL; /*This of course won't compile because assigning void* (null) to node variable
                              but if i make n point to NULL, nothing will happen because i'm inside a function
                              and the pointer is duplicated (the passed pointer will still work) */
    }
}

void main(){
    node first;
    node second;
    first.data = 1;
    first.next = &second;
    second.data = 2;
    second.next = NULL;
    linked_list l;
    l.head = &first;
    print_list(&l);
    delete_node(&second);
    print_list(&l);
}

正如其他人所说,你不能.

如果您希望能够存储两个分配的(通过malloc)和列表中的非分配(静态或自动)存储对象,并具有从列表中删除对象并释放它们的“删除”功能,您需要将一个标志存储为每个列表成员的一部分,指示它是否在分配的存储中或不,并且只释放那些是的。

另请注意,如果自动存储结构的生命周期在您将其从列表中删除之前就结束了,您将遇到大麻烦!如果处理这个问题让您感到困惑,那么您可能会更好地使用分配的存储(malloc) 对于所有列表成员。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从堆栈内存中删除结构 的相关文章

随机推荐

  • 有人可以向我解释一下 PHP 中的 pack() 函数吗?

    我想了解更多关于pack PHP 中的函数 https secure php net manual en function pack php https secure php net manual en function pack php
  • 如何在 Qt 中上移选定行

    我有一个QTableView有 3 行和 2 列 这里我使用的是QStandardItemModel 我想在单击 QPushButton 时向上 向下移动一行 如何在中向上 向下移动一行QTableView 感谢您的回复瓦汉乔 我已经尝试过
  • Android 中的 Mifare Ultralight C 身份验证 (2.3.6)

    我正在尝试验证 Mifare Ultralight C ISO IEC 14443 2 和 14443 3 A 型兼容 标签 我使用Android中提供的MifareUltralight transceive 函数发送身份验证命令 我还检查
  • 在 tomcat catalina.properties 中注入环境变量 [Kubernetes]

    我正在使用 kubernetes 进行 Web 应用程序部署 containers name myapp image tomcat8 jre8 latest imagePullPolicy Always env name DATABASE
  • 如何更改 Winforms 中的 TrackBar 刻度颜色?

    我有一个使用轨迹栏的 winforms 应用程序 BackColor 属性可以更改 但这样做会使每个 刻度 的颜色几乎不可见 我没有看到修改 勾号 颜色的显式属性 我是否缺少某些东西或改变蜱虫颜色的方法 TrackBar 是本机 Windo
  • Apollo 2.1 中的多重查询/变更

    我需要一些使用 Apollo 2 1 中新的查询和突变组件的帮助 尤其是多个查询和突变 我有以下问题 我有一个 graphql 请求 该请求取决于之前的 graphql 结果 我该如何处理这个问题 如何在已经有查询的组件中添加两个不同的突变
  • 设置 Linux 中可用物理内存总量的限制

    我知道我应该设置mem MEMORY LIMIT 但我不知道在运行时或启动时该去哪里 以便对操作系统控制的总物理内存设置限制 我正在运行 I O 基准测试 并且我想限制可用的总体物理内存量 我找到了我正在寻找的答案 基本上 设置总可用物理内
  • 关于tinymce的“windowManager.open”方法的“body”参数

    我正在查看这个创建tinyMCE插件的示例 我想做的是打开 弹出窗口 弹出窗口内的内容以编程方式指定 无需在特定 url 加载物理页面 在tinymce容器中添加type file的输入元素 https stackoverflow com
  • GetQueuedCompletionStatus 永远阻塞

    我正在编写一个服务器应用程序 我想使用 IOCompletion 端口 因此我为服务器编写了一个原型 但我遇到了 GetQueuedCompletionStatus 的问题 它永远不会返回 它会阻塞 下面是我的代码 bool CreateS
  • UserControl 依赖属性设计时

    我正在 WPF 中创建一个简单的用户控件 其中包含一个按钮内的 TextBlock
  • 如何在数据源位置中使用sitecore查询? (动态数据源)

    是否可以将数据源位置 而不是数据源 设置为 sitecore 查询 我想要做的是将子布局的数据源位置设置为包含它的项目 当前项目 下的文件夹 子布局数据源位置应指向当前项目下的文件夹 所以我尝试将数据源位置设置为query Items 但这
  • 在讨论编程语言时,“强大”意味着什么?

    在编程语言讨论 比较的背景下 术语 能力 是什么意思 它有明确的含义吗 即使是一个定义不明确的含义 假设有人说 X 语言比 Y 语言更强大 或提出相同的问题 他们的意思是什么 或者他们想找出什么信息 它没有明确定义的含义 在这些类型的讨论中
  • Android 锁屏 C# .NET 副本

    我希望在 Visual Studio C 中创建一个模仿 Android 模式锁定屏幕的应用程序 并且想知道是否有人有任何这样做的提示 这不是一个商业项目 不会赚钱 只是一点乐趣 我一直在玩 WPF 项目 现在不知所措 我想到的唯一方法是在
  • Spark 中的 Dataframe 连接可以保留顺序吗?

    我目前正在尝试将两个数据帧连接在一起 但在其中一个数据帧中保留相同的顺序 From 哪些操作保留 RDD 顺序 https stackoverflow com questions 29284095 which operations pres
  • React Native + Firebase 存储:base64 和 blob 不起作用

    我试图将我的图像文件编码为 base64 或 blob 但它们都不起作用 我也在用这个 https github com react community react native image picker https github com
  • 如何在 Pnotify 中将焦点设置在按钮上

    我在我的项目中使用 pnotify Alert jquery 我试图在弹出对话框时将焦点设置在 确定 按钮上 这样用户只需按 Enter 或空格键即可关闭对话框 但无法做到这一点 这是 pnotify 的链接 http sciactive
  • Ruby“.downcase!”和“downcase”混淆

    我刚刚开始 Ruby 编程 我读过小写和小写的区别 在红宝石中 https stackoverflow com questions 709229 difference between downcase and downcase in rub
  • 使用 dplyr mutate 将向量分成两列

    假设我有以下功能 get answer lt function condition dp rp if condition DD result lt rbinom n 2 size 1 prob dp if condition in c DR
  • 在 Android 中捕获完整的日志

    我想知道如何从 Android 设备获取完整日志 从我的应用程序初始化到任何崩溃或直到强制关闭我的应用程序 我在这里发帖的原因是我的应用程序在某个时候崩溃了 但是当我使用日志时DDMS Logcat我的崩溃详细信息已被新日志覆盖 我如何获取
  • 从堆栈内存中删除结构

    我有一个链表结构 我想将一个节点 另一个结构 指针传递给一个函数 该节点是链表的一部分 但我将节点单独传递给删除器函数 我希望它将下一个节点数据复制到自身中 覆盖其数据 并删除下一个节点 从而删除自身 这部分正在工作 我让它检查传递的节点是