问题如下:
编写了一个动态库,里面有个函数Data(PVOID source,PVOID result),source 是需要处理的源数据,结构体类型的,而result是处理后的结果!在主程序中,需要多线程处理数据,有一 Explain(PVOID res),当接受到一个数据包的时候,则启动一个Explain线程,如果再接受到一个数据包,则再启动一个Explain线程。在Explain线程里面,需要调用Data函数来对数据进行处理!核心问题:1。在Data中,可以为res动态分配内存么?如果可以,那怎么样释放呢?2。如果不可以,那可以在Data中临时创建个内存区,然后将内存区中的数据拷贝到res指向的空间中,怎么样拷贝?memcpy?有什么需要注意的地方呢

解决方案 »

  1.   

    1. 如果要内部动态分配的话 , Data 的参数要改一下.Data(PVOID source,PVOID * ppResult)
    {
        *ppResult = new ...
    }调用方式是
    PVOID pResult = NULL;
    Data(...,&pResult);
    //do something
    if (pResult)
        delete pResult;2。需要注意的问题是 Result 分配的内存空间是否足够,
      

  2.   

    Explain(PVOID res)中如果传了指针过来可以直接用啊,
    如:BYTE res[1024];
    ...
    Explain(res);//调用Explain
    ...
    Explain(PVOID res)
    {
    ...
    Data(source,res);//调用Data
    }
      

  3.   

    十分感谢!
    aa3000,在
    if (pResult)
        delete pResult;
    的时候,出现了_CrtIsValidHeapPointer(pUserData)的错误,说是内存堆的问题!
    可能是我没太说明白,这里面,pResult指向的结构体,里面的内容也是指针,其所指向的空间,也是需要进行动态分配的!我采用了一个迂回的方式,解决的!