0

我正在使用 LibreDWG 库处理 DWG 文件。
我成功打开了一个文件,并将所有数据放在一个包含许多不同字段的 dwg 结构中。

dwg 结构描述在这里

当我尝试从类型为 Dwg_Object_Ref ** 的 object_ref 打印数据时,问题就出现了,我将值 num_object_refs 用于遍历 object_ref 数组,然后每个元素都包含 3 个字段(请参见此处)。我可以打印 te value absolute_ref,它是一个 long unsigned int,但是我需要从 obj 获取一个值,它是一个指向 dwg_object 结构的指针。从 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);

我得到所有地址没有任何问题。有人可以帮我理解这个问题的原因吗?
谢谢!

4

1 回答 1

0

最后我发现了问题。它在分析的 .dwg 文件中,因为在列表的第二个元素中它的地址 (0x00) 错误,这就是它一直停在同一个地方的原因。我假设该文件是正确制作的,并且在其他一些文件中似乎是一个问题,因为我还尝试了不同的 dwg 文件,所以我会在尝试访问它之前在地址值上添加一个条件。

于 2018-07-27T14:56:49.870 回答