我正在使用LibreDWG库处理DWG文件。
我成功地打开了一个文件,并将所有数据放入包含许多不同字段的dwg结构中。
dwg的结构描述是这里。
当我试图打印来自object_ref (类型为Dwg_Object_Ref ** )的数据时,我取值num_object_refs来遍历object_ref数组,然后每个元素都包含3个字段(请看这里)。我可以打印te值absolute_ref,这是一个长时间的无符号int,但是接下来我需要从obj获得一个值,它是指向对象结构的指针。我想从obj获取值"index“,我的代码是:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "dwg.h"
int load_dwg(char *filename, unsigned int opts) {
unsigned int i;
int success;
Dwg_Data dwg;
memset(&dwg, 0, sizeof(Dwg_Data));
dwg.opts = opts;
success = dwg_read_file(filename, &dwg);
FILE *f = fopen("lines.txt", "w");
for (i = 0; i < dwg.num_object_refs; i++)
{
struct _dwg_object *object;
object = malloc(sizeof(struct _dwg_object));
object = dwg.object_ref[i][0].obj;
printf("%d\n", object->index);
}
fclose(f);
dwg_free(&dwg);
return success;}
int main (int argc, char *argv[])
{
int i = 1;
unsigned int opts = 1;
load_dwg (argv[i], opts);
return 0;
}这打印的第一个值的“索引”,然后有一个分段错误。
210
Erreur de segmentation (core dumped)但是,如果我将for中的printf行更改为打印地址,如下所示:
printf("%p\n", &dwg.object_ref[i]->obj->index);我知道所有的地址都没问题。有人能帮我理解一下这个问题的原因吗?
谢谢!
发布于 2018-07-27 14:56:49
最后我发现了问题。它位于被分析的.dwg文件中,因为在列表的第二个元素中,它有一个错误的地址(0x00),这就是为什么它总是在同一个位置停止。我假设文件是正确创建的,而且在其他一些文件中它似乎是一个问题,因为我也尝试使用不同的dwg文件,所以在尝试访问它之前,我将在地址值上添加一个条件。
https://stackoverflow.com/questions/51555306
复制相似问题