gpt4 book ai didi

c++ - 删除动态数组时 Symbian 崩溃

转载 作者:太空宇宙 更新时间:2023-11-04 15:28:46 26 4
gpt4 key购买 nike

我正在尝试分配一个大小为 1000 的字符数组。这个数组被传递给一个应该用数据填充的函数已从 TCP 套接字收到。出现问题然后当我尝试删除 [] 缓冲区时: 结果是我得到了一个用户Panic 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();
}

感谢任何有用的提示!

最佳答案

Konrad 说的是真的,但我认为他不了解 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);
}

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

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

关于c++ - 删除动态数组时 Symbian 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1306738/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com