这是免费char *的正确点吗

时间:2015-06-09 12:14:29

标签: c++ memory-management delete-operator

我有这段代码

{
 char *filename = createFilename(file, extension);
 ...
 ...
 delete[] filename;
}

inline char *DataSet::createFilename(LPCSTR file, LPCSTR extension)
{
  char *path = new char[strlen(file) + strlen(extension) + 1];
  strcpy(path, file);
  strcat(path, extension);

  return path;
}

我是否正确删除主函数中的“filename”?我在删除时收到了ERROR_INVALID_NAME。我检查了文件名,这是正确的。

我知道我应该使用std :: string但这是现有的代码。请帮忙

2 个答案:

答案 0 :(得分:2)

如果是现有代码且您无法更改createFilename以返回std::string,那么如何更改呼叫网站以使用std::unique_ptr。它专门用于数组,比你自己删除更安全。见this answer

答案 1 :(得分:1)

当目录名称,文件名或卷标不正确时,通常会出现 ERROR_INVALID_NAME 类型的错误。在Windows上,您可能需要处理escape sequences。例如,如果文件的路径是 C:\ Folder \ File.ext ,则应使用字符串 C:\\ Folder \\ File.ext 。此外,即使Windows允许在文件和目录名称中使用它们,您使用的API也可能无法接受某些字符。请参阅this