小编Spo*_*rth的帖子

整数溢出不一致

请原谅我这个问题.我寻找类似问题的答案,但我仍然对我的问题感到困惑.所以无论如何我会拍这个问题.我正在使用名为libexif的C库处理图像数据.我在我的Linux桌面和MIPS板上运行我的应用程序(使用此库).对于特定的图像文件,当我尝试获取创建的时间时,我收到错误/无效值.在进一步调试时,我看到对于这个特定的图像文件,我没有按预期获得标记(EXIF_TAG_DATE_TIME).

该库具有多个实用功能.大多数功能的结构如下

int16_t 
exif_get_sshort (const unsigned char *buf, ExifByteOrder order)
{
    if (!buf) return 0;
        switch (order) {
        case EXIF_BYTE_ORDER_MOTOROLA:
                return ((buf[0] << 8) | buf[1]);
        case EXIF_BYTE_ORDER_INTEL:
                return ((buf[1] << 8) | buf[0]);
        }

    /* Won't be reached */
    return (0);
}

uint16_t
exif_get_short (const unsigned char *buf, ExifByteOrder order)
{
    return (exif_get_sshort (buf, order) & 0xffff);
}
Run Code Online (Sandbox Code Playgroud)

当库试图调查原始数据中是否存在标记时,它会调用exif_get_short()并将返回的值赋给一个类型为enum(int)的变量.

在错误情况下,exif_get_short()应该返回无符号值(34687)返回一个负数(-30871),这会从图像数据中提取整个标记提取.

34687超出了最大可表示的int16_t值的范围.因此导致溢出.当我在代码中进行这种轻微修改时,一切似乎都运行正常

uint16_t
exif_get_short (const unsigned char *buf, ExifByteOrder order)
{
    int …
Run Code Online (Sandbox Code Playgroud)

c integer-overflow libexif

8
推荐指数
1
解决办法
462
查看次数

C++:向量的向量

我需要创建一个矢量矢量(准确地说是3个矢量的矢量).每个组成向量具有不同的数据类型(String,double,用户定义的数据类型).这在C++中是否可行?如果没有,还有其他优雅的方式来实现我的要求吗?

c++ stl

6
推荐指数
1
解决办法
573
查看次数

如何在 QML 中引用调用对象

有没有办法获取 QML 中调用对象的引用?我正在寻找相当于 QML 中“this”指针的东西

示例:假设我有一个组件,用作图形元素的后端,例如视频播放器的搜索栏。该后端将视频的当前持续时间和总持续时间作为输入,并定期向图形搜索栏提供更新。现在,如果此后端中有一个信号处理程序用于发送当前持续时间和总持续时间的信号,则它可能看起来像这样:

Connections {
  target: sender //this

  onSendSeekUpdate()
  {
    //do something
  } 
}
Run Code Online (Sandbox Code Playgroud)

当然我猜这可以用C++实现,然后导入到QML中。但我只是想知道 QML 是否也支持这个?这样我就可以直接在 QML 中编写这样的钩子。

qt qml

5
推荐指数
1
解决办法
5148
查看次数

ffmpeg vs mediainfo用于获取缩略图和元数据

我需要从视频文件中提取元数据信息以及该文件的缩略图.为此,我尝试了ffmpeg,并在stdout上看到元数据(如持续时间,分辨率,编解码器,creation_time等).如果我需要使用这些,我应该解析stdout并提取我需要的元数据.

我还读到了MediaInfo实用程序,它也提供了元数据.我不确定它是否可以提供缩略图.我也知道MediaInfo并没有使用ffmpeg.

我想知道是否有人对ffmpeg和MediaInfo以及我上面提到的要求都有工作知识,是否有人可以建议哪两个更适合.

两者的内存占用比较也很大.

video metadata ffmpeg mediainfo

4
推荐指数
2
解决办法
6152
查看次数

STL排序是否支持UTF8?

STL排序功能是否支持按字母顺序排序其中包含UTF-8字符的名称?说德语/法语的名字?

c++ sorting stl utf-8

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

清除已经空的向量会导致未定义的行为吗?

如果我发生什么clear一个vector这是已经清除之前?我在Visual Studio中尝试过,它没有导致任何运行时错误.但我正在寻找一个可能的例外原因(下图)并想知道这是否是原因?

*** glibc detected *** process.out: double free or corruption (out): 0x01a0b588 *** 
Run Code Online (Sandbox Code Playgroud)

更新代码:

bool myclass::Sort(SortType enSortOption)
{

  bool bRet = TRUE;


  m_oVecOfIntsOrig.clear();
  m_oVecOfIntsSorted.clear();

  for(int i = 0;i<m_oList.listsize();i++)
  {
    m_oVecOfIntsOrig.push_back(i);
  }
  m_oVecOfIntsSorted = m_oVecOfIntsOrig; 
  //Just sort the indices     
  switch(enSortOption)
  {
  case Alpha:
    { 
      t_SortStructAlpha sSortAlpha(this);
      sort( m_oVecOfIntsSorted.begin(), m_oVecOfIntsSorted.end(), sSortAlpha );        
    }
    break;
  case Dist:
    {        
      t_SortStructDist sSortDist(this);
      sort( m_oVecOfIntsSorted.begin(), m_oVecOfIntsSorted.end(), sSortDist );
    }
    break;
  case none:  
    {

      //Nothing to do
      return TRUE;
    }
    break;  
  default: …
Run Code Online (Sandbox Code Playgroud)

c++ vector std undefined-behavior

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

标签 统计

c++ ×3

stl ×2

c ×1

ffmpeg ×1

integer-overflow ×1

libexif ×1

mediainfo ×1

metadata ×1

qml ×1

qt ×1

sorting ×1

std ×1

undefined-behavior ×1

utf-8 ×1

vector ×1

video ×1