小编sie*_*ery的帖子

如何在 Pharo 中订购字典?

假设我们有一个循环,以明确的顺序输入Associations 到 a :Dictionary

| d |

d := Dictionary new: 10.

1 to: 10 do: [ :i |
    d add: i -> (i + 9 printStringBase: 20)
].

d
Run Code Online (Sandbox Code Playgroud)

当我评估这段代码时,我得到了Dictionary一个“扭曲”的顺序:

9 -> I
5 -> E
1 -> A
10 ->J
6 -> F
2 -> B
7 -> G
3 -> C
8 -> H
4 -> D
Run Code Online (Sandbox Code Playgroud)

每次Dictionary创建具有相同条目数据的 a 时,它都具有相同的顺序,所以我认为这是一个功能而不是错误..?

我使用 Pharo v9.0.21。

collections dictionary smalltalk pharo

3
推荐指数
1
解决办法
174
查看次数

收到以下警告:在 GCC 4.4 中使用灵活数组成员传递结构的 ABI 已更改

当我尝试运行我的程序时,我收到了这个警告和一些奇怪的错误。 rmi_pdu在下面的结构中包含一个我想访问的可变大小的数组。

struct rmi_message_s {  /* Queue element containing Rmi message */
  struct rmi_message_s          *hnext;
  struct rmi_message_s          *hprev;
  uint16_t                      gen_counter;   /* Generation counter */
  time_value                    send_time;
  uint8_t                       retry_count;
  TAILQ_ENTRY(rmi_message_s)    rmi_message_next;
  rmi_message_pdu               rmi_pdu; /* contains a variable sized array */ 
};

typedef struct {
  uint16_t        zero;
  uint16_t        type;
  uint8_t         version;
  uint8_t         len;
  uint8_t         protocol;
  uint16_t        edge_port;
  uint16_t        core_port;
  uint32_t        connexus_id;
  pi_ipv4_addr_t  edge_addr;
  pi_ipv4_addr_t  core_addr;
  uint16_t        gen_count;     /* Integer to identify a stale packet */
  uint8_t         payload[];
} rmi_message_pdu;
Run Code Online (Sandbox Code Playgroud)

问题是当我试图释放我动态分配的内存时。内容在那里,但free() …

c flexible-array-member

2
推荐指数
1
解决办法
3591
查看次数