【问题标题】:Delete struct written with memcpy [closed]删除用 memcpy 编写的结构 [关闭]
【发布时间】:2020-12-16 19:57:09
【问题描述】:

我有一个关于内存块的任务。我们有一个struct Record,我需要将其保存在这些内存块中。每个块包含 5 条记录,我将它们一个接一个地存储在一个块列表和一个 int CountOfRecords 中。

我们还有一个 DeleteRecord 函数,它可以从内存块中删除(duh)一条特定的记录。现在,除了减少计数并将所有下一条记录向前移动以实际删除该记录之外,有没有办法实际删除用 memcpy 写入的内容?就像将 NULL 之类的东西写成结构实例一样? Memmove 似乎没有提供这样的应用程序。

编辑:我这样写记录

//block is the pointer to block,int is for the Count, and record is placed
memcpy(block+sizeof(int)+sizeof(Record),&record,sizeof(Record));

【问题讨论】:

  • 你需要展示一些代码。很难猜出你的意思。
  • 内存存储值。没有办法“删除”或“擦除”内存以使其不包含值。您可以将内存设置为全零字节或其他表明那里没有有效记录的模式。 memset 可用于将其设置为全零或一个值的所有字节。你到底想做什么?
  • 目标是不再引用该记录。您建议的模式是将记录设置为无效的一种方式
  • 正如第一条评论中所建议的那样,确实需要一些代码(最好是 minimal reproducible example )才能完全理解您在说什么。
  • 什么意思“不再有对该记录的引用”?你在说什么样的“参考”?您在这种情况下使用该术语非常令人困惑(并且可以说不适用于 C 代码)

标签: c memory block memcpy


【解决方案1】:

你基本上不想移动数据而是将内存设置为零,memset怎么样?

memset(block+sizeof(int)+sizeof(Record), 0, sizeof(Record));

但是您必须以某种方式记住,此时的记录已清零(未使用),最好是某些属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多