On 8/30/21 9:35 AM, james.p.leblanc wrote:
> D-ers,
>
> I am attempting to use pipeProcess for interacting with an external
> process.
> My simplified routine can work somewhat. But, trying to print any messages
> that process writes to stderr yields the message:
>
> (master) gnuplot > gnuplot_example
> **core.exception.InvalidMemoryOperationError@src/core/exception.d(647):
> Invalid memory operation**

That error almost always means you are allocating memory in a destructor, which sometimes is presumably due to using parts of your object that have already been finalized by the GC. (Or, the GC has already been terminated? I am not sure.)

In this case, converting your ~this to a named function solves the issue:

  // Was: ~this()
  void close() {
    // ...
  }

// ...

  auto gp = new Gnuplot();
  scope (exit) {
    gp.close();
  }

Ali

Reply via email to