首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用C语言将数据从LibreDWG指针读取到指针结构时的分割故障

用C语言将数据从LibreDWG指针读取到指针结构时的分割故障
EN

Stack Overflow用户
提问于 2018-07-27 09:50:05
回答 1查看 87关注 0票数 0

我正在使用LibreDWG库处理DWG文件。

我成功地打开了一个文件,并将所有数据放入包含许多不同字段的dwg结构中。

dwg的结构描述是这里

当我试图打印来自object_ref (类型为Dwg_Object_Ref ** )的数据时,我取值num_object_refs来遍历object_ref数组,然后每个元素都包含3个字段(请看这里)。我可以打印te值absolute_ref,这是一个长时间的无符号int,但是接下来我需要从obj获得一个值,它是指向对象结构的指针。我想从obj获取值"index“,我的代码是:

代码语言:javascript
复制
#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;
  }

这打印的第一个值的“索引”,然后有一个分段错误。

代码语言:javascript
复制
210
Erreur de segmentation (core dumped)

但是,如果我将for中的printf行更改为打印地址,如下所示:

代码语言:javascript
复制
   printf("%p\n", &dwg.object_ref[i]->obj->index);

我知道所有的地址都没问题。有人能帮我理解一下这个问题的原因吗?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-07-27 14:56:49

最后我发现了问题。它位于被分析的.dwg文件中,因为在列表的第二个元素中,它有一个错误的地址(0x00),这就是为什么它总是在同一个位置停止。我假设文件是正确创建的,而且在其他一些文件中它似乎是一个问题,因为我也尝试使用不同的dwg文件,所以在尝试访问它之前,我将在地址值上添加一个条件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51555306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档