我正在使用 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);
我得到所有地址没有任何问题。有人可以帮我理解这个问题的原因吗?
谢谢!