C++ FreeRTOS仅在发布时崩溃

C++ FreeRTOS仅在发布时崩溃,c++,c,freertos,C++,C,Freertos,我的代码只有在发布时才会崩溃: int main() { MyStruct s; s.field = bla; xTaskCreate(TestTask, "TestTask", 2000, &s, 1, 0); // other tasks creation vTaskStartScheduler(); } void TestTask(void *p) { // some delay MyStruct* s = (MyStruct*)p; a

我的代码只有在发布时才会崩溃:

int main() 
{
  MyStruct s;
  s.field = bla;

  xTaskCreate(TestTask, "TestTask", 2000, &s, 1, 0);

  // other tasks creation
  vTaskStartScheduler();
}


void TestTask(void *p) 
{
  // some delay
  MyStruct* s = (MyStruct*)p;
  another_func(s->field); // hard fault
}
我设法像这样修复它:

int main()
{
  MyStruct* s = new MyStruct();
  s->field = bla;
  xTaskCreate(TestTask, "TestTask", 2000, s, 1, 0);

  // other tasks creation
  vTaskStartScheduler();
}
我不明白为什么。我是否修复了它或解决了可能仍然存在的内存损坏问题


谢谢。

我太蠢了,它写在弗里特斯的文件上:

因此,传递堆栈变量的地址是无效的


如果释放有助于您使用
new
?然后将问题标记为C++如果我正确理解了文档,则创建任务后,
xTaskCreate
不会阻塞并返回。然后退出
main
,现在
MyStruct smain
堆栈上的code>已不存在。我还想知道当程序正常结束时退出
main
时会发生什么情况。@PaulOgilvie通常情况下,在创建任务后需要在main中调用
vTaskStartScheduler()
函数,但不确定这是否是缺少的地方。@PaulOgilvie:我应该提到main不存在,我剥离了代码,只是为了显示我是如何传递结构的,sorryhmm,但是在任务执行时变量应该仍然存在,因为主函数的堆栈帧是最后一个要退出的?我们认为:-/