公共函数返回struct崩溃实例指针

时间:2015-11-12 15:32:13

标签: c++ stm32 rtos keil

我是c ++和RTOS的新人,所以不要怪我或嘲笑我

我有:

function sort_trends_by_hostid($a, $b) {
  if ( $a->hostid == $b->hostid ) {
    return 0;
  }     
  return ($a->hostid < $b->hostid) ? -1 : 1; 
}

usort($trends, 'sort_trends_by_hostid');

和someOtherClass:

typedef struct
{
//... 10 uint8 and 2 enums
} tStruct1;
typedef struct
{
//... slightly different, but completely different enums
} tStruct2;

class someClass
{
  private:
    struct
    {
      //...
      union
      {
        tStruct1 s1;
        tStruct2 s2;
      } data;
    } node[10];
  //...
  public:
    unsigned int length;

    tStruct1 Get1(void);
    tStruct2 Get2(void);
  //...
}

tStruct1 someClass::Get1(void)
{
  //...
  length--;
  return node[length].data.s1;
}

tStruct2 someClass::Get2(void)
{
  //...
  length--;
  return node[length].data.s2;
}

这很好用:

someClass * inst1 = new someClass();

和此:

inst1->Get1(void); //useless...

将inst1移动到其他地方。在分支到函数之前发生了3个指令,堆栈指针递减了0x14(sizeof结构元素可能是0x12 + alignment - &gt;我认为它没问题),然后递增。功能本身似乎工作正常。返回值是一些未初始化的值。

tStruct1 something = inst1->Get1(void);

也很好。

这两个调用是从不同的线程完成的。无论如何,我打算把这个班级扔掉,因为项目改变了,但我想知道我做错了什么。

0 个答案:

没有答案