Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 删除动态创建的二维数组时的访问冲突消息_C++_Pointers_Access Violation - Fatal编程技术网

C++ 删除动态创建的二维数组时的访问冲突消息

C++ 删除动态创建的二维数组时的访问冲突消息,c++,pointers,access-violation,C++,Pointers,Access Violation,我试图动态分配一个二维数组,然后在使用后将其删除。代码如下所示: 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); dele

我试图动态分配一个二维数组,然后在使用后将其删除。代码如下所示:

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。如果是这种情况,那么您的第2个和第3个参数是向后的,这将导致访问冲突
    • 您已经用自己的函数重载strcpy函数,该函数接受3个参数。如果是这种情况,请张贴代码。不过,使用strncpy可能会更好
  • “strlen(psError)”也不应该编译(缺少一个“z”)。我假设您的意思是pszError,但是如果您有一个名为psError的全局变量,那么可能分配了不正确的内存量
  • 如果pszError是一个错误的指针,或者可能不是以null结尾的,那么代码显然会崩溃

有关正确的strcpy和strncpy参数,请参阅。

错误在于以下几行:

ptr[0] = new char[strlen(psError) + 1];
strcpy(ptr[0], strlen(pszError) + 1, pszError);
在我看来,其他一切都是正确的。但是代码甚至不应该编译时出现这些错误。需要考虑的几点:

  • strcpy不接受3个参数。这段代码甚至不应该编译。这可能意味着以下情况之一:
    • 您输入了一个拼写错误,并打算使用strncpy。如果是这种情况,那么您的第2个和第3个参数是向后的,这将导致访问冲突
    • 您已经用自己的函数重载strcpy函数,该函数接受3个参数。如果是这种情况,请张贴代码。不过,使用strncpy可能会更好
  • “strlen(psError)”也不应该编译(缺少一个“z”)。我假设您的意思是pszError,但是如果您有一个名为psError的全局变量,那么可能分配了不正确的内存量
  • 如果pszError是一个错误的指针,或者可能不是以null结尾的,那么代码显然会崩溃

有关正确的strcpy和strncpy参数,请参阅。

谢谢您的帮助!我们发现问题正如你们中的一些人在分配中指出的那样。因此,我们应该在分配之后检查指针返回是否正确。当我们进行复制/等操作时,它从未进行过压缩。然而,当发行程序试图释放内存时,它给出了访问冲突

问候,


安迪

谢谢你的帮助!我们发现问题正如你们中的一些人在分配中指出的那样。因此,我们应该在分配之后检查指针返回是否正确。当我们进行复制/等操作时,它从未进行过压缩。然而,当发行程序试图释放内存时,它给出了访问冲突

问候,


安迪

错误在“一些复印材料”中。可能在分配的空间之外写入。向我们展示“复制内容”代码部分,我认为问题就在那里。使用
std::vector
或Boost.MultiArray。此代码片段是正确的。“ptr[0]中的某些复制内容”中发生了什么?可能您正在(a)显式更改ptr[0]的值,或者(b)通过意外超出ptr[0][]的范围而隐式更改ptr[0]的值。(这两个数组很可能在堆上彼此“坐”在一起)。
ptr[0]=newchar[10];ptr[0]=新字符[strlen(psError)+1]->至少内存泄漏…错误在“某些复制内容”中。可能在分配的空间之外写入。向我们展示“复制内容”代码部分,我认为问题就在那里。使用
std::vector
或Boost.MultiArray。此代码片段是正确的。“ptr[0]中的某些复制内容”中发生了什么?可能您正在(a)显式更改ptr[0]的值,或者(b)通过意外超出ptr[0][]的范围而隐式更改ptr[0]的值。(这两个数组很可能在堆上彼此“坐”在一起)。
ptr[0]=newchar[10];ptr[0]=新字符[strlen(psError)+1]->至少内存泄漏。。。