我可以将文件中的地址(已经写入)读入指针吗?它会有用吗?

时间:2013-11-23 23:34:35

标签: c++

假设我在myFile.txt中写了一个结构的地址。我能将该地址读入我的程序吗?这个地址会有用吗?

6 个答案:

答案 0 :(得分:1)

指针只是一个内存地址。你可以写得很好,但是当你读它时,它仍然只是一个内存地址。除非它所指向的对象在读取时位于完全相同的内存位置,否则您将“读取”指向随机数据的指针,您无法将其转换为之前指向的对象的类。

就像存储蝴蝶的位置(纬度/经度),然后试图从那个位置找到那只蝴蝶。现在,蝴蝶在一个完全不同的地方最为可能。

答案 1 :(得分:1)

1)你可以写它。 2)你可以阅读它。 3)如果你把它读回到编写它的程序的同一个实例中,那么它很有可能是有意义的,这取决于你是否删除了内存。

但通常根本没用。内存布局可以在运行之间自由更改,一次运行时malloc / new内存在下次运行程序时仍然没有等待。

答案 2 :(得分:0)

我怀疑它会有用。程序运行时,会将其加载到内存中。所以现在你编写一个struct的文本文件。程序终止时,将释放内存。除非您同时运行两个程序(一个是写地址而另一个正在读取),否则它将无用,并可能产生异常。

如果您打算在其他时间使用struct值,我认为最好编写struct的内容并将其保存到文件而不是地址。要编写结构的内容,您可以尝试查看如何编写二进制文件。

答案 3 :(得分:0)

你可以做到。它是否有用取决于该地址是否仍包含任何有用信息。一般来说,应该避免。

答案 4 :(得分:0)

是的,,但没有任何目的。

您可以随意保存它,然后立即读回它,只要您没有做任何事情来使指针无效,就可以在相同的过程中读取它。这包括:

  • 结束流程

  • 释放指针指向的内存,如果它在堆上(来自newmallocHeapAlloc等)

  • 从函数返回,如果它在堆栈上(局部变量或参数)

换句话说,你不能通过将它保存在一个你不能通过首先保存指针的文件中来做任何事情。

使用文件进行持久存储(即,当进程关闭时需要保持状态,使所有指针无效)或者作为进程之间共享数据的流的抽象(即无论如何不能共享指针)和计算机(即可以'无论如何都要分享指针)。如果需要从先前的运行中恢复结构,请将结构保存在文件中。如果需要在进程之间共享它,可以通过文件按值复制它,或者您正在查看完全不同的内核函数集。如果您需要在计算机之间共享它,则必须复制它。

如果您不需要其中任何一项,只需使用指针

答案 5 :(得分:0)

结构或类应将其成员写入文件 如果结构包含指向另一个类的指针,则容器结构需要告诉元素结构将自己写入文件。

例如:

class Element
{
  public:  
    ostream& write_to_file(ostream& output_file);
};

class Container
{
  public:
    ostream& write_to_file(ostream& output_file)
    {
      return contained_element.write_to_file(output_file);
    }
  private:
    Element contained_element;
};

规则是一个类知道它拥有的成员。该类是将其成员写入文件的良好候选者;不是一些外部机制。