将数据读入struct

时间:2018-01-15 19:08:57

标签: c++ pointers struct

我有一个结构SInfoEntry来存储我从VCF file读取的数据。

struct SInfoEntry
{
   int type; //Info Type
   std::string key; //Info Tag
   void* values = NULL; //Data
   int n; //Len
};

在下面的代码中,我尝试将数据存储在我的struct中的 values 变量中。但是,当我尝试这样做时,我收到了错误:

SInfoEntry infoEntry;
//This line is giving me EXC_BAD_ACCESS exception
bcf_get_info_values(m_pHeader, m_pRecord, "AF", (void**)(&infoEntry.values), &infoEntry.n, BCF_HT_REAL);

但是,如果我声明一个本地数组,该函数会成功返回我想要的数据:

void* values = NULL;
int   nvalue;
bcf_get_info_values(m_pHeader, m_pRecord, "AF", (void**)(&values), &nvalue, BCF_HT_REAL);

为什么尝试将数据读入struct失败?我在指针算术中遗漏了什么吗?

我正在使用外部库中的 'bcf_get_info_values' 函数,这是该函数的签名:

int bcf_get_info_values(const bcf_hdr_t *hdr, bcf1_t *line, const char *tag, void **dst, int *ndst, int type);

修改: Here bcf_get_info_values 功能来源的链接。我可以看到,我不需要分配内存,因为函数使用的是realloc()。

1 个答案:

答案 0 :(得分:0)

您实际在做的是将数据复制到未分配的内存空间。

在第一个示例中,它可能已初始化为NULL,因此应用程序崩溃了。 第二个例子就是将数据复制到随机存储器位置,这不起作用,非常危险。

您可以执行以下操作之一:

声明一个数组,其大小为您要放入其中的最大对象大小:

uint8_t values[1000];
int   nvalue;
bcf_get_info_values(m_pHeader, m_pRecord, "AF", (void**)(&values), &nvalue, BCF_HT_REAL);

或动态分配数组:

void* values = malloc(size); 
int   nvalue;
bcf_get_info_values(m_pHeader, m_pRecord, "AF", (void**)(&values), &nvalue, BCF_HT_REAL);