可能在这里的某个地方回答了,但是当我环顾四周时却没有看到。我有一个用C语言进行的XML_Parse,并且我通过几种不同的方式动态分配内存,以将结构保存到其中。保存的内容的一部分是指向结构(rd_cart)的指针,在THAT结构内部是指向另一结构rd_cut的指针。
当我尝试通过指针访问/复制到结构内的结构时,我遇到了麻烦(核心转储)。
在已分配的内存空间结构中,将结构的地址用于复制功能的正确方法是什么?基本上,我想使用解析器返回的数据在rd_cart结构的一部分rd_cut结构中设置值。
下面的代码段是
--- Start Code Snip ---
struct rd_cut {
char cut_name[11];
unsigned cut_cart_number;
unsigned cut_cut_number;
};
struct rd_cartscuts {
unsigned cart_number;
char cart_grp_name[41];
.
.
struct rd_cut *cuts[];
};
struct xml_data {
unsigned carts_quan;
unsigned cut_quan;
char elem_name[256];
char strbuf[1024];
struct rd_cartscuts *carts;
};
static void XMLCALL __ListCartsCutsElementStart(void *data,
const char *el, const char **attr)
{
struct xml_data *xml_data=(struct xml_data *)data;
if(strcasecmp(el,"cart")==0) { // Allocate a new cart entry
xml_data->carts=realloc(xml_data->carts,
(xml_data->carts_quan+1)*sizeof(struct rd_cartscuts));
(xml_data->carts_quan)++;
}
if(strcasecmp(el,"cut")==0) { // Allocate a new cart/cuts entry
xml_data->carts=realloc(xml_data->carts,
(xml_data->cuts_quan+1)*sizeof(struct rd_cut));
(xml_data->cuts_quan)++;
}
strlcpy(xml_data->elem_name,el,256);
memset(xml_data->strbuf,0,1024);
}
static void XMLCALL __ListCartsCutsElementEnd(void *data, const char *el)
{
struct xml_data *xml_data=(struct xml_data *)data;
struct rd_cartscuts *carts=xml_data->carts+(xml_data->carts_quan-1);
if(strcasecmp(el,"number")==0) {
sscanf(xml_data->strbuf,"%u",&carts->cart_number);
}
if(strcasecmp(el,"groupName")==0) {
strlcpy(carts->cart_title,xml_data->strbuf,11);
}
.
.
.
/* Process Cuts if exist */
if(strcasecmp(el,"cutName")==0) {
cuts=(struct rd_cut **)carts->cuts[xml_data->cuts_quan-1];
strlcpy(cuts->cut_name,xml_data->strbuf,11);
}
- End Code Snip -