VS2010 中的堆错误
Heap error in VS2010
我正在尝试实现该程序,该程序可识别Windows文件属性。我有一个代码,但有时,在主块中传递返回后,我会收到堆错误。感谢您的关注和帮助!
#include "stdafx.h"
#include <Windows.h>
#include <conio.h>
_TCHAR* getStringAttributes(int value, _TCHAR* str[])
{
DWORD d = GetFileAttributes(str[value]);
_TCHAR* temp;
switch(d)
{
case 2048: temp = L"Compressedn"; break;
case 32: temp = L"Archiven"; break;
case 16: temp = L"Directoryn"; break;
case 16384: temp = L"Encryptedn"; break;
case 2: temp = L"Hiddenn"; break;
case 128: temp = L"Normaln"; break;
case 1: temp = L"Readonlyn"; break;
case 4: temp = L"Systemn"; break;
case 256: temp = L"Temporaryn"; break;
default: temp = L"Error or unsupported attributen"; break;
}
return temp;
}
int _tmain(int argc, _TCHAR* argv[])
{
_TCHAR* attString = new _TCHAR();
char* ynAnswer = new char();
if(argv[1] == NULL)
{
printf("%sn","You didn't type file path. Try again?[Y/N]");
gets_s(ynAnswer,10);
if(*ynAnswer == 'y' || *ynAnswer == 'Y')
{
printf("%sn","Type in a path to the file");
argv[1] = new _TCHAR();
_getws(argv[1]);
if(argv[1] != L"")
{
printf("%s","Attribute: ");
attString = getStringAttributes(1,argv);
_tprintf(attString);
printf("%s","forn");
_tprintf(argv[1]);
}
}
}
else
{
printf("%s","Attribute: ");
attString = getStringAttributes(1,argv);
_tprintf(attString);
}
printf("%s","Goodbye");
getch();
delete[] ynAnswer;
delete[] attString;
return 0;
}
您将整个字符串输入到 1 或 2 个字节的字符串中。这些分配:
_TCHAR* attString = new _TCHAR();
char* ynAnswer = new char();
仅分配 1 个项目数组。
它应该是:
_TCHAR* attString = new _TCHAR[MAX_SIZE];
char* ynAnswer = new char[MAX_SIZE];
当MAX_SIZE
必须哔哔声作为宏。
更好的是使用:
wstring attString ;
string ynAnswer;
wcin>> attString;
cin>> ynAnswer;
更多的问题是行中的分配:
argv[1] = new _TCHAR();
除了前面回答的问题之外,在这一行中,argv[1]
甚至可能不存在。您应该输入到其他缓冲区。
它可以是这样的:
wstring argv1;
if(argc <2){
wcin>>argv1;
}else{
argv1=argv[1];
}
现在使用 argv1
而不是 argv[1]
还有一件事:
您正在使用_TCHAR
作为WCHAR
。
使用_TCHAR
字符串应为:
_T("some string")
不是:
L"some string"
.
相关文章:
- 显式 std::exception_ptr 转换为 bool 不存在.VS2010 错误?
- 在使用VS2010构建ACE和TAO(CORBA)时发生了许多错误
- 提升 vs2010 上的进程错误
- 在vs2010中使用iostream时,出现错误C2039:'exit':不是"全局命名空间"的成员
- VS2010 和 VS2012 以及 C++11 错误 C2059:语法错误:"..."怎么走?
- VS2010 中 C++ lambda 表达式的奇怪错误(变量 y1 )
- LNK2001和LNK2019 VS2008期间(或VS2010)的错误从VS2005升级
- 程序错误,由于在VS2010中使用std::unique_ptr
- VS2010代码分析奇怪的数组限制错误
- IntelliSense和友元函数错误(VS2010)
- C++VS2010链接器关于命名空间变量的错误
- VS2010 中的函数错误
- VS2010中奇怪地重复出现模板模式错误
- get_driver_instance()MySQL C++VS2010的链接器错误
- 错误: C2065: 'DBL_MAX':未声明的标识符(在 VS2008 中,但在 VS2010 中未)
- 将功能区添加到现有的非功能区 mfc 项目 - 在 VS2010 中断言错误
- VS2010 - 如何解决"XXX is a reserved class name"错误
- vs2010 上的 Zlib 链接器错误
- 如何解决VS2010的MSB6001错误?
- std::make_pair VS2010 中 boost::bind 的错误