gpt4 book ai didi

c++ - 新建/删除导致访问冲突

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

好吧,这让我感到困惑...下面的代码在一个 DLL 中,当我的控制台应用程序调用这段代码时,它突然在 delete[] lpBuffer 行抛出访问冲突。我整天都在使用这段代码,根本没有改变它。到目前为止,它一直运行良好。

访问违规消息

Unhandled exception at 0x6948b1a5 in rhcopy.exe: 0xC0000005: Access violation reading location 0x4de1c37f.

图书馆代码

#define MAX_PACKET_SIZE  0x3FFF

DWORD MyClass::GetFile( LPCSTR lpszRemoteFile, LPCSTR lpszLocalFile )
{
LPBYTE lpBuffer = NULL;

// ...

lpBuffer = new BYTE[MAX_PACKET_SIZE];

// ...

if( NULL != lpBuffer )
delete[] lpBuffer;

// ...
}

我做错了什么吗?

旁注:我一直在考虑将 lpBuffer 转换为 vector 。意见?

编辑

我要感谢你们的帮助!但显然……问题不在这里。问题实际上是在调用 GetFile(...) 之后立即发生的调用应用程序中的 printf() 语句。对于造成的困惑,我深表歉意。微软的调试工具似乎没有指向导致错误的行,而是指向执行的最后一行。我投票结束了这个问题。

最佳答案

您在此处显示的代码没有任何问题。

我想到了两种可能性:

  1. 错误实际上并不在 delete 中,而是在两边的代码中。

  2. 您已通过使用覆盖某些随机内存的无效指针或多次删除指针来破坏堆。

在显示的代码中切换到 RAII(即 vector)不会解决这些问题,但如果您在其余代码中始终使用它们,可能会有所改善。

关于c++ - 新建/删除导致访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8347939/

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