删除动态数组时Symbian发生混乱

0 c++ symbian

我正在尝试分配一个大小为1000的char数组.这个数组被传递给一个函数,在该函数中应该填充从TCP套接字接收的数据.当我尝试删除[]缓冲区时会出现问题:在这里我得到一个用户恐慌42.不幸的是,我真的没有看到这个简单的代码片段出了什么问题......

int main
{
    unsigned char *buffer = new unsigned char[1000];
    Recv(&buffer);

    delete[] buffer;        
    return (0);
}

void Recv(unsigned char **buffer)   
{
    TRequestStatus iStatus;
    TSockXfrLength len;

    TBuf8<1000> buff;
    iSocket.RecvOneOrMore( buff, 0, iStatus, len );     
    User::WaitForRequest(iStatus);  

    *buffer = ( unsigned char* )buff.Ptr();  
}   
Run Code Online (Sandbox Code Playgroud)

感谢任何有用的提示!

Ste*_*sop 5

康拉德说的是真的,但我认为他不懂Symbian.如果你确实需要一个函数来将字节读入char缓冲区,那么更好的修复方法是:

void Recv(unsigned char *aBuffer, int aSize)   
{
    TRequestStatus iStatus;
    TSockXfrLength len;

    TPtr8 buff(aBuffer, aSize);
    iSocket.RecvOneOrMore( buff, 0, iStatus, len );         
    User::WaitForRequest(iStatus);  
}
Run Code Online (Sandbox Code Playgroud)

TBuf8是一个描述符,它包含一个用于保存数据的数组.TPtr8是一个描述符,它指向您指定的外部缓冲区.两者都可以传递给RecvOneOrMore,因为它们都继承自参数类型TDes8&.因此,可以使套接字将其数据直接写入缓冲区,而不是写入堆栈中的缓冲区,然后按照Konrad的代码进行复制.

您可能还需要检查状态以检测错误,并报告成功/失败以及写回调用者的长度.