1
  • 我有一个uint8_t *C = malloc(24*sizeof(uint8_t));

  • 我需要将一些整数和这个 *C 发送到另一个节点(在 ad hoc 网络中)。所以我将使用一个结构

    struct fulMsg {
      int msgType;
      int msgCount;
      //uint8_t *CC;     
    } fulMsg_t;
    
    typedef struct fulMsg fulMsg_tt;`
    
  • packetbuf_copyfrom(X, sizeof(X)); 在我的 api(contiki) 中有一个方法调用。如果我像这样创建结构, struct fulMsg *fmsg = &fulMsg_t;我可以像这样使用上面的方法packetbuf_copyfrom(fmsg, 8);,从另一端我可以很容易地得到这两个值。

  • 所以我的问题是,当我要对该指针应用相同的东西时,它无法正常工作,我正在使用的网络模拟器突然崩溃(我认为存在分段错误)。我无法在结构号中初始化 *C 的大小。以及如何正确地做到这一点fmsg->CC = C;

  • 在另一端,这就是我收到这个结构的方式是struct fulMsg *r_fmsg = &fulMsg_t;rfmsg = (fulMsg_tt *)(packetbuf_dataptr());。所以我可以很容易地从另一端获取值。(不需要ntoh和hton,但如果真的需要也可以)

  • 简单来说,我想做的是将 *C contains 的值和其他一些整数发送到另一个节点。我怎样才能正确地做到这一点。

4

1 回答 1

1

我对 contiki 不熟悉,而且似乎没有太多方便的文档,但从我发现的情况来看,该函数看起来不够聪明,无法知道结构的哪些部分是指针,所以我的猜测是它不是为此而设计的。我认为您必须创建一个直接包含完整数组的结构,例如,

struct fulMsg {
  int msgType;
  int msgCount;
  uint8_t CC[24];
} fulMsg_t;

typedef struct fulMsg fulMsg_tt;
fulMsg_tt msg;
uint8_t *C = malloc(24*sizeof(uint8_t));
// Do whatever with this array, then
msg.msgCount = 24; // or whatever
memcpy(&msg.CC, C, 24*sizeof(uint8_t));


packetbuf_copyfrom(&msg, sizeof(fulMsg_tt));
于 2012-10-12T00:33:55.177 回答