【问题标题】:Graphviz as a library: Create multiple graphs results in errorGraphviz 作为库:创建多个图形会导致错误
【发布时间】:2013-06-18 05:46:48
【问题描述】:

我正在创建一个需要创建多个图形的小型 C 程序。这些图表的点在一个字符串中,所以我使用agmemread 而不是agread(我想避免创建临时文件)。但是,当多次调用agmemread 时,它似乎会中断。

以下示例输出“error2”,因此第二次调用agmemread时失败:

#include <gvc.h>

int main() {
  Agraph_t *g1 = agmemread("graph testgraph {\n\n}");

  if (!g1) {
    printf("error1\n");
    return 1;
  }

  agclose(g1);

  Agraph_t *g2 = agmemread("graph testgraph {\n\n}");

  if (!g2) {
    printf("error2\n");
    return 1;
  }

  agclose(g2);
  return 0;
}

在一个真实的例子中,这些部分之间当然会有更多的代码。

在第二次调用 agmemread 之前,我需要释放或关闭任何东西吗?或者它是graphviz的一个错误?我在 Mac OS X 上使用 graphviz: stable 2.30.1, devel 2.31.20130523.0446

agread 相同的示例反而像一个魅力。

【问题讨论】:

  • 像这样的库通常有某种“char *get_error()”函数,它返回一个描述最后遇到的错误的字符串。我还没有仔细研究过这个库,但是头文件中是否有类似的东西(不区分大小写的“错误”搜索)?在失败情况下提供 NULL 句柄作为唯一反馈是不寻常的。

标签: c graphviz


【解决方案1】:

这是 agmemread() 中的一个错误。从 2013 年 6 月 18 日开始,该修复程序应该会出现在软件包中。感谢您的报告。

【讨论】:

    【解决方案2】:

    在每个图表的结束“}”之后添加“\n”可以解决问题。从语法上讲,我仍在调查为什么需要这样做。

    【讨论】:

      猜你喜欢
      • 2018-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多