【发布时间】: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 句柄作为唯一反馈是不寻常的。