在结构内指针指向结构的麻烦

时间:2018-09-18 15:27:48

标签: c

可能在这里的某个地方回答了,但是当我环顾四周时却没有看到。我有一个用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 -

0 个答案:

没有答案