删除动态创建的二维数组时出现访问冲突消息
Access Violation Message on Deleting Dynamically created two dimensional array
我正在尝试动态分配一个二维数组,然后在使用后将其删除
func(char* pszError)
{
//Initialize
char ** ptr = new char*[1];
// Some copying stuff in ptr[0]
ptr[0] = new char[strlen(psError) + 1];
strcpy(ptr[0], strlen(pszError) + 1, pszError);
delete[] ptr[0];
delete[] ptr;
return;
}
这对我来说是无害的,不应该出错。然而,在点delete[] ptr;
,它抛出了我的访问违规。
有人能帮我吗?我已经做够了。
错误在于以下几行:
ptr[0] = new char[strlen(psError) + 1];
strcpy(ptr[0], strlen(pszError) + 1, pszError);
在我看来,其他一切都是正确的。但代码甚至不应该在编译时出现这些错误。需要考虑的几点:
- strcpy不接受3个参数。这段代码甚至不应该编译。这可能意味着以下情况之一:
- 您有一个打字错误,本应使用strncpy。如果是这种情况,那么您的第二个和第三个参数是向后的,这将导致访问冲突
- 您已经用自己的函数重载了strcpy函数,该函数接受3个参数。如果是这种情况,请张贴代码。不过,使用strncpy可能会更好
- "strlen(psError("也不应该编译(缺少"z"(。我想你指的是pszError,但如果你有一个名为psError的全局变量,那么可能分配了不正确的内存量
- 如果pszError是一个错误的指针,或者可能不是null终止的,那么代码显然会崩溃
请参阅http://linux.die.net/man/3/strcpy对于正确的strcpy&strncpy参数。
感谢您的帮助!我们发现,正如你们中的一些人所指出的,这个问题在分配中。因此,我们应该在分配后检查返回的指针是否正确。当我们复制的时候,它从来没有压缩过。然而,当发行器试图释放内存时,它发出了访问违规。
问候,
Andy
相关文章:
- 写入位置0x0000000C时发生访问冲突
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- 链表中写入访问冲突的未知原因
- C++中的openCV Mat访问冲突
- C++尝试深度复制唯一指针时出现内存访问冲突
- C++ 中动态二维数组的访问冲突
- 从嵌套循环中的 std::list 中删除将返回访问冲突
- 写入访问冲突异常
- 在类 12.exe 中0x7B37FF80 (ucrtbased.dll) 引发异常: 0xC0000005:访问冲突读
- 0xC0000005:访问冲突写入位置0xCDCDCDCD动态分配错误
- 读取访问冲突.这0xCDCDCDCD
- 0xC0000005:访问冲突读取位置 0x00000000. 重载 == 运算符的问题
- 插入数组时违反写访问冲突
- 使用 ReadProcessMemory 获取字符串值的访问冲突
- 尝试通过共享指针使用变量时读取访问冲突
- 堆栈上的 C++ 访问冲突写入异常
- 引发异常:写访问冲突. temp 为 nullptr
- 将静态字符数组中的字符分配给动态分配的字符数组 - 访问冲突
- 使用加速进程间创建消息队列 - 内存访问冲突
- 删除动态创建的二维数组时出现访问冲突消息