静态const数组中的出站访问

时间:2015-08-19 11:01:30

标签: c arrays undefined-behavior

假设以下代码:

static const value_string global_variable [] = {
        { 4,   "STRING1" },              
        { 6,   "STRING2" },
        { 9,   "STRING3" },
        { 10,  "STRING4" },
        { 11,  "STRING5" },
        { 12,  "STRING6" },
        { 13,  "STRING7" },
        { 14,  "STRING8" },
        { 15,  "STRING9" },
};

const gchar * try_val_to_str_idx(const guint32 val, const value_string *vs, gint *idx)    
{
   gint i = 0;
   DISSECTOR_ASSERT(idx != NULL); 
   if(vs) {
      while (vs[i].strptr) {
         if (vs[i].value == val) {
            *idx = i;
            return(vs[i].strptr);
         }
         i++;
      }
    }

   *idx = -1;
   return NULL;
}

其中vs是一个静态const数组(global_variable),具有两个元素的结构: 一个int和一个指向char的指针。

此代码是wireshark源代码的摘录。因此,此函数假定vs是一个静态const变量。

我的问题是,我可以假设访问静态const数组的出站索引(我猜想存储在.DATA段上)是有效的吗?访问的内存是否有效?或者是未定义的行为?

例如,如果我尝试找到相对于值40的字符串会发生什么? 如果它有效,我怎么能确定,内存的位置将有0值,然后是NULL并退出while循环?

1 个答案:

答案 0 :(得分:3)

  

我可以假设访问静态const数组的出站索引(我猜想存储在.DATA段上)是有效的吗?

访问超出内存 始终 undefined behaviour。甚至不尝试这样做。