我正在尝试动态分配二维数组,然后在使用后删除它。代码看起来像这样:
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;
点,它会让我违反访问权限。
任何人都可以帮助我。我已经做了足够的打击。
答案 0 :(得分:1)
错误在于以下几行:
ptr[0] = new char[strlen(psError) + 1];
strcpy(ptr[0], strlen(pszError) + 1, pszError);
其他一切对我来说都是正确的。但代码甚至不应该编译这些错误。需要考虑的一些要点:
请参阅http://linux.die.net/man/3/strcpy了解正确的strcpy& strncpy参数。
答案 1 :(得分:0)
感谢您的帮助!在分配中,我们发现问题是你们中的一些人所指出的。所以,我们应该在分配后检查返回的指针是否正确。当我们复制/等时,它从未被编译过。然而,当解析者试图释放内存时,它会给出访问冲突。
此致
安迪