在多线程中怎样安全可靠地创建和使用内存?解决方法

在多线程中怎样安全可靠地创建和使用内存?
我在多线程中动态创建一个内存,同时创建了一个响应频率很高的Timer(不是用Windows的,是RTX的),并在Timer中更新这个内存的值。
如果只运行一两次,没有问题,可在运行几次以后,就会在释放内存的地方崩溃,请问一般是什么原因造成的?

程序大致流程如下:

C/C++ code

void BtRun()//点击按钮运行一次
{

    CreateThread(NULL,0,ThreadRtx,NULL,0,NULL);//创建多线程
  
}

DWORD WINAPI ThreadRtx(  LPVOID lpParameter ) //多线程程序
{

    float *RTval=(float *)malloc( sizeof(double) * nTime ); //在多线程内动态创建内存


    //创建一个运行在多线程上的Timer
    HANDLE hTimer = RtCreateTimer(
                                  NULL,            // security
                                  0,               // stack size - 0 uses default
                                  TimerHandler,    // timer handler
                                  (PVOID)RTval,            // NULL context (argument to handler)
                                  RT_PRIORITY_MAX, // priority
                                  CLOCK_2) ));      // RTX HAL timer

    Sleep(5000);//让Timer运行5秒


    RtDeleteTimer(hTimer);//结束Timer
    RtCloseHandle(hTimer);

    free(RTval);  //======运行几次后就是在这个地方出错!!======
    ExitThread(0);

    return 1;
}

void RTFCNDCL TimerHandler(PVOID  context)
//rtx 中断响应
{
    static int num=0;
    float *RTval=(float *)(context);
    RTval[num++]=12345.0f;
}


------解决方案--------------------
非实际代码贴是没有意义的,因为如果你能理解中间可能出现问题的地方,你就不会来问了,如果你不理解,那么贴的代码和问题可能无关,忽略了导致问题的地方

最常见的问题,不同线程访问同一个对象(包括new出来的对象)而不进行并发控制。这个很多多线程编程的书上都有讲